问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++或c语言-遍历二叉树

发布网友 发布时间:2022-05-21 05:23

我来回答

2个回答

热心网友 时间:2023-10-15 18:41

typedef struct bitnode
{
char data;
struct bitnode *lchild, *rchild;
}bitnode, *bitree;

void createbitree(t,n)
bitnode ** t;
int *n;
{
char x;
bitnode *q;
*n=*n+1;
printf("\n Input %d DATA:",*n);
x=getchar();
if(x!='\n') getchar();
if (x=='\n')
return;
q=(bitnode*)malloc(sizeof(bitnode));
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
*t=q;
printf(" This Address is: %o, Data is: %c,\n Left Pointer is: %o, Right Pointer is: %o",q,q->data,q->lchild,q->rchild);
createbitree(&q->lchild,n);
createbitree(&q->rchild,n);
return;
}

void visit(e)
bitnode *e;
{
printf(" Address: %o, Data: %c, Left Pointer: %o, Right Pointer: %o\n",e,e->data,e->lchild,e->rchild);
}

void preordertraverse(t)
bitnode *t;
{
if(t)
{
visit(t);
preordertraverse(t->lchild);
preordertraverse(t->rchild);
return ;
}
else
return ;
}

void countleaf(t,c)
bitnode *t;
int *c;
{
if(t!=NULL)
{
if (t->lchild==NULL && t->rchild==NULL)
{*c=*c+1;
}
countleaf(t->lchild,c);
countleaf(t->rchild,c);
}
return;
}

int treehigh(t)
bitnode *t;
{
int lh,rh,h;
if(t==NULL)
h=0;
else
{
lh=treehigh(t->lchild);
rh=treehigh(t->rchild);
h=(lh>rh ? lh:rh)+1;
}
return h;
}

main()
{
bitnode *t; int count=0;
int n=0;
printf("\n Please input TREE Data:\n");
createbitree(&t,&n);
printf("\n This is TREE struct: \n");
preordertraverse(t);
countleaf(t,&count);
printf("\n This TREE has %d leaves ",count);
printf(" , High of The TREE is: %d\n",treehigh(t));
}
我这个是比较复杂的,如果用stl,可能会简单些。

热心网友 时间:2023-10-15 18:42

我以前实验的,你看一下,,
二叉树的建立用先序与中序,分析
编辑 | 删除 | 权限设置 | 更多▼ 更多▲ 设置置顶 推荐日志 转为私密日志 jasper 发表于2010年04月25日 16:30 阅读(1) 评论(1)
分类: 编写 权限: 公开

欢迎上我的百度空间,

http://hi.baidu.com/%C1%F5%BB%C0%CD%A51989/blog/item/9e38cd3932a99028b8998fbc.html

/* 请用中序和先序来建立一个二叉树*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define NULL 0
struct node
{ char data;
struct node *lchild,*rchild;
};
/*这个是建立一个二叉树的存储结构,定义根节点,以及定义做孩子以及右孩子*/
/* 这个是输入一个先序以及一个中序,来完成对二叉树的建立*/
struct node *creat(char *pre,char *ord,int n)
{ /*pre为一个数组名包涵着先序,ord为一个数组名,是一个中序,而n为这个
二叉树的节点的数目*/
struct node *head;/* 定义这个根节点,*/
int ordsit;/* 为这个中序遍历的,数组下标*/
head=0;
if(n<=0)
return 0;
else
{
head=(struct node *)malloc(sizeof(struct node));
head->data=*pre;/* 因为这个pre是一个先序数组,所以,这个数组的首地址为这个要建立的数的跟指针*/
head->lchild=0;
head->rchild=0;/*对这个已获得的根节点的左右孩子复初值为NULL*/
ordsit=0;/* ord,中序的下标赋零*/
while(ord[ordsit]!=*pre)/*这个过程实质是在中序遍历中寻找,根节点的位置*/
{ ordsit++;
}
head->lchild=creat(pre+1,ord,ordsit); /* pre +1 是在获得先序中左子树的根节点的位置,而这个中序中左子树的位置不变*/
head->rchild=creat(pre+ordsit+1,ord+ordsit+1,n-ordsit-1);/* 在中序中这个柚子树的位置为,在先序中右子树的位置是*/
/* 其实就是是这个的左子树,以及柚子树都指向要递归的*/
return head;
}
}
/* 中序递归遍历*/
void inorder1(struct node *r)
{
if(!r)
return ;
else
{ inorder1(r->lchild); /* 进行递归遍历*/
printf("%c",r->data);
inorder1(r->rchild);
}http://hi.baidu.com/%C1%F5%BB%C0%CD%A51989/blog/item/9e38cd3932a99028b8998fbc.html
}
void inorder(struct node *head)/* 进行中序遍历*/
{
struct node *p;
struct node *stack[20];/* 设置一个站*/
int top=0;
p=head;
while(p||top!=0)
{
while(p)
{ stack[top++]=p;/* 沿着左子树进行遍历,遇到左子树就进栈保存*/
p=p->lchild;
}

p=stack[--top];/*出战来进行计算*/
printf("%c",p->data);
p=p->rchild;/* 注意这个p与上面的p!=NULL.密切联系*/
}
}
int main()
{ struct node *head;
char pre[20],ord[20];
int n;
gets(pre);
gets(ord);
n=strlen(pre);
head=creat(pre,ord,n);
inorder1(head);/* 都是中序遍历,但是一种是递归一种不是,*/
printf("\n");
inorder(head);
getch();

}

验证,,,

输入/*测试事例

-+a*b%cd/ef
a+b*c%d-e/f
*/

在这里,用到了栈的概念,其实关于递归调用,其实都是用栈来实现的 ,恩,

栈不是一种程序,而是一中算法,恩,就是啊,它是一种思想很是丰富的 算法,

尤其是在应用的时候,很是,光

我看了一个原始的二叉树的建立,其实,他们更是用到了,栈,的,梯队,

而且,还是自动分配空间的,就是说,

栈,咋就是栈里面的参数可以有多个,有不同的形式,可以使结构体的,形式‘、’
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在思科的CCNA,CCNE,CCIP的考证费分别是多少啊,通过率怎样 长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 二叉树遍历举例有哪些? 教师资格证考试什么时候开始报名? 2013年教师资格证是怎么考啊?报名有什么条件吗?什么时候报名啊?请各位高人指点指点哦!感激不尽 涧,拧可以组什么词 涧、俯、皑、蹄、溅的词语(组三个) 涧能组什么词 四川职称评审什么时候可以办啊,在什么地方办理? 川能动力财报速递?川能动力今日如何?川能动力千股点评? 川能动力股本为什么那么大?川能动力2021年年报?川能动力千股千评个股点评? 川能动力半年中报?川能动力今日解读?川能动力的千股千评? 川能动力年报分析?评价川能动力?下周川能动力能涨吗? 四川环评费用多少 四川哪些单位可以做防洪影响评价报告? 求一个大学生英语课前演讲的PPT,介绍某一样东西或事物,3-5分钟 求介绍一件产品的PPT 求一个10张以上的PPT 内容是介绍自己喜欢的东西 随便是什么 聚乙烯农用膜经日光照射时间久了之后变色,是什么原因? 聚乙烯与聚丙烯 哪个降解速度快? 高密度聚乙烯hdbe会降解吗 塑料瓶需要多久才能在大自然中降解 二叉树遍历的介绍 五十岁的女人能穿粉色系衣服吗 卤猪心放什么卤的肉量高 配OK镜要多久可以取镜,长什么样 角膜塑形镜跟OK镜是一回事吗?菲士康角膜塑形镜怎么样啊? ok镜是什么??急求 迈儿康OK镜设计是什么样的? 急求高考文科数学全国卷真题,年份越多越好,只找到了近十年的!有的 近十年高考数学ll卷的题和答案 一个瑜伽动作要坚持多久才算好 瑜伽0基础怎么练一个动作要坚持多久 瑜伽每个动作保持时间至少需要多久大神们帮帮忙 个人农业银行储蓄卡出账工商信用卡进账都不是本人操作 不在还款日期? 信用卡是工商银行的能否与农业银行卡绑定自行还款 工商银行跟农业银行两个信用卡哪个比较好 农行欠费多年还可以伸请工行信用卡吗 农业银行与工商银行那个好 一个月婴儿感冒声音沙哑怎么办 D9PZD是多大显存 阿姨的一怎么组词