您的当前位置:首页 > 编程 > 急求C语言写的“二叉树的建立和后序遍历的演示”

急求C语言写的“二叉树的建立和后序遍历的演示”

来源:你问我答 http://361t.net|人气:3969 ℃|时间:2018-02-09 18:36:38

急求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);/*后序遍历二叉树*/
}

本网站所有内容均由编辑从门户收集,想要更多?知识与问答互助群
CopyRight © 2013-2017 网站地图 All Rights Reserved.|豫ICP备12011683号