C语言 关于二叉树排序树的建立及中序遍历程序的调试
发布网友
发布时间:2022-05-22 04:59
我来回答
共1个回答
热心网友
时间:2024-03-06 15:03
看这个吧,跟你的设计一摸一样,有注释,你的没有注释,有些不怎么好理解。
#include
<stdio.h>
#include
<stdlib.h>
struct
tree//声明树的结构
{
struct
tree
*left,*right;
int
data;
};
typedef
struct
tree
treenode;//声明新类型树结构
typedef
treenode
*b_tree;//声明二叉树链表
//插入二叉树节点
b_tree
insert_node(b_tree
root,
int
node)
{
b_tree
newnode
;//声明树根指针
b_tree
currentnode;//声明目前节点指针
b_tree
parentnode;//声明父节点指针
//申请新节点的内存空间
newnode=(b_tree)malloc(sizeof(treenode));
newnode->data=node;//存入节点内容
newnode->right=NULL;//初始化右指针
newnode->left=NULL;
if(root==NULL)return
newnode;
else
{
currentnode=root;//存储目前节点指针
while(currentnode!=NULL)
{
parentnode=currentnode;//存储父节点指针
if(currentnode->data>node)//比较节点的数值大小
currentnode=currentnode->left;//左子树
else
currentnode=currentnode->right;//右子树
}
if(parentnode->data>node)//将父节点和子节点做链接
parentnode->left=newnode;//子节点为父节点的左子树
else
parentnode->right=newnode;//子节点为父节点的右子树
}
return
root;//返回根节点的指针
}
//建立二叉树
b_tree
create_btree(int
*data,int
len)
{
b_tree
root=NULL;
for(int
i=0;i<len;i++)
root=insert_node(root,data[i]);
return
root;
}
//二叉树中序遍历
void
in_order(b_tree
point)
{
if(point!=NULL)//遍历的终止条件
{
in_order(point->left);//遍历左子树
cout<<point->data<<"
";//打印节点的内容
in_order(point->right);//遍历右子树
}
}
//主程序
void
main()
{
b_tree
root=NULL;//树根指针
int
value;//暂存读入将要遍历的数值
int
nodelist[20];
int
index=0;
printf("请输入将要参与遍历的数值:\n");
//读数值到数组中,
//这是一种不知道数组元素到底有几个的情况下的输入方法
scanf("%d",&value);
while(value!=0)
{
nodelist[index]=value;
index++;
scanf("%d",&value);
}
//建立二叉树
root=create_btree(nodelist,index);
//中序遍历
printf("中序遍历二叉树结果如下\n");
in_order(root);
printf("\n");
}
/*
输入:6
3
1
9
5
7
4
8
0(退出)
结果:1
3
4
5
6
7
8
9
*/