急求C语言写的“二叉树的建立和后序遍历的演示”
楼上你那是C么?
#include<stdlib.h>
structtree/*树的结构宣告*/
{
intdata;/*节点数据*/
structtree*left;/*指向左子树的指标*/
structtree*right;/*指向右子树的指标*/
};
typedefstructtreetreenode;/*树的结构新型态*/
typedeftreenode*btree;/*宣告树节点指标型态*/
/*----------------------------------------*/
/*插入二叉树的节点*/
/*----------------------------------------*/
btreeinsertnode(btreeroot,intvalue)
{
btreenewnode;/*树根指标*/
btreecurrent;/*目前树节点指标*/
btreeback;/*父节点指标*/
/*建立新节点记忆体*/
newnode=(btree)malloc(sizeof(treenode));
newnode->data=value;/*建立节点内容*/
newnode->left=NULL;/*设定指标初值*/
newnode->right=NULL;/*设定指标初值*/
if(root==NULL)/*是否是根节点*/
{
returnnewnode;/*传回新节点位置*/
}
else
{
current=root;/*保留目前树指标*/
while(current!=NULL)
{
back=current;/*保留父节点指标*/
if(current->data>value)/*比较节点值*/
current=current->left;/*左子树*/
else
current=current->right;/*右子树*/
}
if(back->data>value)/*接起父子的链结*/
back->left=newnode;/*左子树*/
else
back->right=newnode;/*右子树*/
}
returnroot;/*传回树根指标*/
}
/*----------------------------------------*/
/*建立二叉树*/
/*----------------------------------------*/
btreecreatebtree(int*data,intlen)
{
btreeroot=NULL;/*树根指标*/
inti;
for(i=0;i<len;i++)/*用回路建立树状结构*/
root=insertnode(root,data[i]);
returnroot;
}
/*----------------------------------------*/
/*二叉树中序遍历*/
/*----------------------------------------*/
voidinorder(btreeptr)
{
if(ptr!=NULL)/*终止条件*/
{
inorder(ptr->left);/*左子树*/
printf("[%2d]\n",ptr->data);/*列印节点内容*/
inorder(ptr->right);/*右子树*/
}
}
/*----------------------------------------*/
/*主程式:建立二叉树且用中序遍历列印出来.*/
/*----------------------------------------*/
voidmain()
{
btreeroot=NULL;/*树根指标*/
/*二叉树节点数据*/
intdata[9]={5,6,4,8,2,3,7,1,9};
root=createbtree(data,9);/*建立二叉树*/
printf("树的节点内容\n");
inorder(root);/*中序遍历二叉树*/
}
/*========================================*/
/*二叉树的前序遍历*/
/*========================================*/
#include<stdlib.h>
structtree/*树的结构宣告*/
{
intdata;/*节点数据*/
structtree*left;/*指向左子树的指标*/
structtree*right;/*指向右子树的指标*/
};
typedefstructtreetreenode;/*树的结构新型态*/
typedeftreenode*btree;/*宣告树节点指标型态*/
/*----------------------------------------*/
/*插入二叉树的节点*/
/*----------------------------------------*/
btreeinsertnode(btreeroot,intvalue)
{
btreenewnode;/*树根指标*/
btreecurrent;/*目前树节点指标*/
btreeback;/*父节点指标*/
/*建立新节点记忆体*/
newnode=(btree)malloc(sizeof(treenode));
newnode->data=value;/*建立节点内容*/
newnode->left=NULL;/*设定指标初值*/
newnode->right=NULL;/*设定指标初值*/
if(root==NULL)/*是否是根节点*/
{
returnnewnode;/*传回新节点位置*/
}
else
{
current=root;/*保留目前树指标*/
while(current!=NULL)
{
back=current;/*保留父节点指标*/
if(current->data>value)/*比较节点值*/
current=current->left;/*左子树*/
else
current=current->right;/*右子树*/
}
if(back->data>value)/*接起父子的链结*/
back->left=newnode;/*左子树*/
else
back->right=newnode;/*右子树*/
}
returnroot;/*传回树根指标*/
}
/*----------------------------------------*/
/*建立二叉树*/
/*----------------------------------------*/
btreecreatebtree(int*data,intlen)
{
btreeroot=NULL;/*树根指标*/
inti;
for(i=0;i<len;i++)/*用回路建立树状结构*/
root=insertnode(root,data[i]);
returnroot;
}
/*----------------------------------------*/
/*二叉树前序遍历*/
/*----------------------------------------*/
voidpreorder(btreeptr)
{
if(ptr!=NULL)/*终止条件*/
{
printf("[%2d]\n",ptr->data);/*列印节点内容*/
preorder(ptr->left);/*左子树*/
preorder(ptr->right);/*右子树*/
}
}
/*----------------------------------------*/
/*主程式:建立二叉树且用前序遍历列印出来.*/
/*----------------------------------------*/
voidmain()
{
btreeroot=NULL;/*树根指标*/
/*二叉树节点数据*/
intdata[9]={5,6,4,8,2,3,7,1,9};
root=createbtree(data,9);/*建立二叉树*/
printf("树的节点内容\n");
preorder(root);/*前序遍历二叉树*/
}
/*========================================*/
/*二叉树的后序遍历*/
/*========================================*/
#include<stdlib.h>
structtree/*树的结构宣告*/
{
intdata;/*节点数据*/
structtree*left;/*指向左子树的指标*/
structtree*right;/*指向右子树的指标*/
};
typedefstructtreetreenode;/*树的结构新型态*/
typedeftreenode*btree;/*宣告树节点指标型态*/
/*----------------------------------------*/
/*插入二叉树的节点*/
/*----------------------------------------*/
btreeinsertnode(btreeroot,intvalue)
{
btreenewnode;/*树根指标*/
btreecurrent;/*目前树节点指标*/
btreeback;/*父节点指标*/
/*建立新节点记忆体*/
newnode=(btree)malloc(sizeof(treenode));
newnode->data=value;/*建立节点内容*/
newnode->left=NULL;/*设定指标初值*/
newnode->right=NULL;/*设定指标初值*/
if(root==NULL)/*是否是根节点*/
{
returnnewnode;/*传回新节点位置*/
}
else
{
current=root;/*保留目前树指标*/
while(current!=NULL)
{
back=current;/*保留父节点指标*/
if(current->data>value)/*比较节点值*/
current=current->left;/*左子树*/
else
current=current->right;/*右子树*/
}
if(back->data>value)/*接起父子的链结*/
back->left=newnode;/*左子树*/
else
back->right=newnode;/*右子树*/
}
returnroot;/*传回树根指标*/
}
/*----------------------------------------*/
/*建立二叉树*/
/*----------------------------------------*/
btreecreatebtree(int*data,intlen)
{
btreeroot=NULL;/*树根指标*/
inti;
for(i=0;i<len;i++)/*用回路建立树状结构*/
root=insertnode(root,data[i]);
returnroot;
}
/*----------------------------------------*/
/*二叉树后序遍历*/
/*----------------------------------------*/
voidpostorder(btreeptr)
{
if(ptr!=NULL)/*终止条件*/
{
postorder(ptr->left);/*左子树*/
postorder(ptr->right);/*右子树*/
printf("[%2d]\n",ptr->data);/*列印节点内容*/
}
}
/*----------------------------------------*/
/*主程式:建立二叉树且用后序遍历列印出来.*/
/*----------------------------------------*/
voidmain()
{
btreeroot=NULL;/*树根指标*/
/*二叉树节点数据*/
intdata[9]={5,6,4,8,2,3,7,1,9};
root=createbtree(data,9);/*建立二叉树*/
printf("树的节点内容\n");
postorder(root);/*后序遍历二叉树*/
}