二叉查找树遍历问题
发布网友
发布时间:2022-04-18 20:03
我来回答
共2个回答
热心网友
时间:2022-04-18 21:33
你好
很高兴为你解答
答案是:下面是我的答案,已经在VC2010下测试通过 。
满意请采纳,谢谢
#include "stdafx.h" /*VC用的头文件,在其它C中请删除*/
#include <stdio.h> /*输入六个整数45、24、53、12、37、9,插入数据元素13,删除数据元素24和53 */
#include <stdlib.h>
typedef struct BiTNode/*结点结构 */
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Insert(BiTree T,int e)/*插入操作*/
{
BiTree p=T, f=NULL, s;
s=(BiTree)malloc(sizeof(BiTNode));
s->data=e;
s->lchild=s->rchild=NULL;
if (T==NULL) /*插入 s 为新的根结点*/
{
T = s;
}
else
{/*查找插入位置*/
while(p && p->data!=e) /*如果当前节点不为空且节点的值不是插入的值 */
{
if (p->data>e)
{f=p; p=p->lchild;} /*如果当前节点值大于插入的值,则记录当前节点,并将节点的左节点作为当前节点 */
else
{f=p; p=p->rchild;} /*否则,节点的右节点作为当前节点 */
}
if (p==NULL&&e <f->data) /*如果当前节点为空并且插入的值小于父节点中的值; */
f->lchild = s; /*插入 s 为 f 的左孩子 */
else if(p==NULL&&e>f->data) f->rchild = s; /* 插入 s 为 f 的右孩子*/
else {printf("insert wrong!");exit(0);}
}
return T;
}
void Postorder(BiTree T)
{ /* 中序遍历二叉树 */
if (T)
{
Postorder(T->rchild); /* 遍历左子树 */
printf("%d ",T->data); /*访问结点 */
Postorder(T->lchild);/* 遍历右子树 */
}
}
void main()
{
int e,i;
BiTree T;
T=NULL;
printf("input 6 num:\n");
for(i=1;i <7;i++)
{
scanf("%d",&e);
T=Insert(T,e);
}
printf("Postorder:\n");
Postorder(T);
printf("\n");
getchar();
}
热心网友
时间:2022-04-18 22:51
最简单的办法就是写一个递归中序遍历的就可以了