百度
360搜索
搜狗搜索

二叉树的遍历例题,数据结构关于遍历二叉树的一道题目 急 急 急 在线等啊详细介绍

本文目录一览: 已知某二叉树的先序遍历序列是aecdb,中序遍历序列是eadcb,该二叉树的根结点是___后序遍历序列为_____

分析过程: 以下面的例题为例进行讲解: 已知一棵二叉树的先序遍历序列和中序遍历序列分别是abdgcefh、dgbaechf,求二叉树及后序遍历序列。 分析:先序遍历序列的第一个字符为根结点。对于中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列。 先序:abdgcefh --> a bdg cefh 中序:dgbaechf --> dgb a echf 得出结论:a是树根,a有左子树和右子树,左子树有bdg结点,右子树有cefh结点。 先序:bdg --> b dg 中序:dgb --> dg b 得出结论:b是左子树的根结点,b无右子树,有左子树。 先序:dg --> d g 中序:dg --> d g 得出结论:d是b的左子树的根结点,d无左子树,有右子树。 先序:cefh --> c e fh 中序:echf --> e c hf 得出结论:c是右子树的根结点,c有左子树(只有e结点),有右子树(有fh结点)。 先序:fh --> f h 中序:hf --> h f 得出结论:f是c的左子树的根结点,f有左子树(只有h结点),无右子树。 还原二叉树为: a b c d e f g h 后序遍历序列:gdbehfca

计算机二级二叉树前序中序后序

二叉树遍历方式是数据结构的基础知识,作为计算机专业的大学生,我的理解如下:
1、 前序遍历
它的遍历顺序是:先访问根结点,再进入这个根结点的左子树;以上述方式遍历完所有左子树后,再进入它的右子树,以同样的方式遍历右子树中的结点,即根结点→左子树→右子树。下图中1为主根结点,245为左子树,367为右子树;在左子树中,2为根结点,4为左子树,5为右子树;在右子树中,3为根结点,6为左子树,7为右子树。依次将每个树中的根结点、左子树以及右子树分清,只到子树中只剩一个元素为止。综上可知,结果为1→2→4→5→3→6→7。
例子
2、 中序遍历
它的遍历顺序是:先进入根结点的左子树,以同样方式遍历左子树结点,在访问当前的根结点,最后进入根结点的右子树,以同样方式遍历右子树结点,即左子树→根结点→右子树。由前序遍历中分析可知结果为4→2→5→1→6→3→7。
3、 后序遍历
它的遍历顺序是:先进入根结点的左子树,以同样方式遍历左子树结点,再进入根结点的右子树,以同样方式遍历右子树结点,左右子树都遍历完后,才能访问当前根结点,即左子树→右子树→根结点。由前序遍历中分析可知结果为4→5→2→6→7→3→1。
试一试,二叉树例题与解答:
例题
前序遍历:A→B→D→F→G→H→I→E→C
中序遍历:F→D→H→G→I→B→E→A→C
后序遍历:F→H→I→G→D→E→B→C→A

数据结构关于遍历二叉树的一道题目 急 急 急 在线等啊

下面是二叉树的遍历题,看得部是很不明白,求解题思路,越详细越好!!!我的分不多,拜托各位!!!
32.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是(

A.CABDEFG
B.ABCDEFG
C.DACEFBG
D.ADCFEG
33.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为(
A
)。
A.CBEFDA
B.
FEDCBA
C.
CBEDFA
D.不定
34.已知某二叉树的后序遍历序列是dabec,
中序遍历序列是debac
,
它的前序遍历是(
D
)。
A.acbed
B.decab
C.deabc
D.cedba
35.
某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E
则前序序列是:B
A.E,G,F,A,C,D,B
B.E,A,C,B,D,G,F
C.E,A,G,C,F,B,D
D.上面的都不对

【【求】】二叉树的三种遍历举例!!!

前序遍历:1 2 4 8 9 10 11 5 3 6 7 (规律:根在前;子树在根后且左子树比右子树靠前);
中序遍历:8 4 10 9 11 2 5 1 6 3 7 (规律:根在中;左子树在跟左边,右子树在根右边);
后序遍历:8 10 11 9 4 5 2 6 7 3 1 (规律:根在后;子树在根前且左子树比右子树靠前);
其它例子:
前序遍历:ABDECFG
中序遍历:DBEAFCG
后序遍历:DEBFGCA
前序遍历:1 2 4 3 5 7 6
中序遍历:2 4 1 5 7 3 6
后序遍历:4 2 7 5 6 3 1
做类似的题目,你可以先由两个遍历画出二叉树。通过形象的二叉树来写出另一个遍历,写的方法如上(递归)。画出二叉树的方法如下:
已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:
1. 根据前序序列的第一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在前序序列中确定左右子树的前序序列;
4. 由左子树的前序序列和中序序列建立左子树;
5. 由右子树的前序序列和中序序列建立右子树。
已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:
1. 根据后序序列的最后一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在后序序列中确定左右子树的后序序列;
4. 由左子树的后序序列和中序序列建立左子树;
5. 由右子树的后序序列和中序序列建立右子树。

二叉树遍历算法,就是给定两种遍历结果求另一种遍历顺序

假设某二叉树的先序遍历序列是abdgcefh,中序遍历序列是dgbaechf,画出二叉树,并给出其后序遍历序列。分析过程:
以下面的例题为例进行讲解:
已知一棵二叉树的先序遍历序列和中序遍历序列分别是abdgcefh、dgbaechf,求二叉树及后序遍历序列。
分析:先序遍历序列的第一个字符为根结点。对于中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列。先序:abdgcefh --> a bdg cefh
中序:dgbaechf --> dgb a echf
得出结论:a是树根,a有左子树和右子树,左子树有bdg结点,右子树有cefh结点。先序:bdg --> b dg
中序:dgb --> dg b
得出结论:b是左子树的根结点,b无右子树,有左子树。先序:dg --> d g
中序:dg --> d g
得出结论:d是b的左子树的根结点,d无左子树,有右子树。先序:cefh --> c e fh
中序:echf --> e c hf
得出结论:c是右子树的根结点,c有左子树(只有e结点),有右子树(有fh结点)。先序:fh --> f h
中序:hf --> h f
得出结论:f是c的左子树的根结点,f有左子树(只有h结点),无右子树。还原二叉树为:
a
b c
d e f
g h后序遍历序列:gdbehfca
前序遍历是什么
这个是二叉树里面的一种遍历情况,前序遍历也叫做先根遍历,可记做根左右。
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
首先从前序的第一个确定二叉树的根A,回到中序切割,将二叉树分为三部分:
左子树的中序DBGE,根A,右子树的中序CHF
再由左子树的前序可知左子树的根为B,于是左子树的中序被再次切分为三部分:
左子树的左子树中序D,左子树的根B,左子树的右子树的中序GE
类似地,由右子树的前序可知右子树的根为C,于是右子树的中序也被切分为三部分:
右子树的左子树为空,右子树的根C,右子树的左子树的中序HF
继续切分下去:GE的根为E、HF的根为F,直到每棵子树只有一个结点为止,最终得到的完整二叉树如下:
于是后序遍历序列为:DGEBHFCA

已知二叉树后序遍历是dabec,中序遍历是debac,求该二叉树的先序遍历。(这种类型的题目又怎么

思路是:首先看后序遍历,后序遍历是先左再右最后根,所以后序遍历最后一个肯定是根结点。所以这里根结点是c,然后看一下c这个结点在中序中的问题,中序遍历是先左再最后右,所以中序序列中,c左边的为c的左子树这边,右边有右子树这边。这里中序debac,所以该树没有右子树,只有左子树。
然后针对c的左子树递归上述过程,构建完树。
下面是我的创建过程,首先确定了c
c
/ \
未知树 无
后序倒数第二个e,确定e未知树的根,然后看中序,d在e左边,ba在右边,d是左子树确定,ba还需要进一步判断
c
/
e
/ \
d 未知数
看后序倒数第三个b,所以未知树的根是b,确定b,然后看b中序中的位置,左边无,右边a,所以最终该二叉树如下
c
/
e
/ \
d b
\
a
最后根据该树核对一下后序和中序,没有问题,所以根据该树先序遍历是cedba

设一颗二叉树的中序遍历结果是DBEAFC,前序遍历结果是ABDECF,则后序便利结果是什么?

好吧,虽然没给分,我就牺牲点吧,记得采纳啊
前序遍历得知A是根节点,在中序遍历中,A讲节点非分根节点A左右子树:即
A
DBE FC
下面看DBE序列,在前序遍历中,这三个的先后顺序是BDE,所以这三个节点中B是根节点,根据中序遍历结果,该三个节点顺序是DBE,所以B讲着三个节点划分为左右节点:结果如下:
A
B FC
D E
下面再看FC两个节点,他们在前序遍历结果中的结果是CF,所以C是这两个节点中的根节点,再根据他们在中序遍历结果中的顺序FC,则F将他们本身划分为左子树(此时为空)和右子树C,则二叉树示意图如下:
A
B C
D E 空 F
后续遍历结果就不需要我写了吧,嘿嘿,望采纳
根据前序遍历ABDECF,可知二叉树的根节点是A,由此把中序遍历DBEAFC分为了两部分DBE和FC,此时可以确定DBE是A的左子树,FC是A的右子树。前序遍历的第二个节点是B,再根据中序遍历中DBE的顺序,可以确定D为B的左孩子,E为B的右孩子;同理,前序遍历为CF,中序遍历为FC,可以确定F为C的左孩子就是这样了
中序遍历结果是DBEAFC,前序遍历结果是ABDECF,则后序遍历结果是DEBFCA
(因为前序遍历结果是ABDECF,知道根结点为A,中序遍历结果是DBEAFC,知道DBE为左子树,FC为右子树,再推出DE是B的叶子结点,F是C的叶子结点。前序遍历结果是ABDECF,知道D是B的左叶子结点,E是B的右边叶子结点。这样就能画出二叉树了,后序遍历自己就能写了啊)清楚以下概念:
中序遍历:先遍历左子树,然后访问根结点,最后遍历右子树
前序遍历:先访问根结点,然后遍历左子树,最后遍历右子树
后序遍历:先遍历左子树,然后遍历右子树,最后访问根结点
例题可以参照百度文库
http://baike.baidu.com/view/549587.htm
能看明白吗?个人觉得知道概念就好解决了,画出二叉树的图
这种题就是根据这两个序列画出对应的树。
前序遍历结果是ABDECF
中序遍历结果是DBEAFC
1.先看前序,那么最先遍历的就是A,因为是前根遍历,所以A就是最根的结点,也就是所说的root结点。(这要看懂,这个不懂理解就有点恼火)
2.先在确立了一个根A.。那么现在去看中序遍历。中序是根是在遍历完左右子树再访问的根,所以DBE是A的左子树的结点。FC是A的右子树。
3.对于左子树的DBE结点。那么哪一个是根结点呢,现在就和步骤1一样。看前根中DBE中的哪个是最先出现的,那么它就是这三个结点的根。那么得出是B.然后找出B的左右子树分别是D和E。如此循环。就可以得出结果了。不明白再问。
后序遍历结果是DEBFCA。
前序遍历得知A是根节点,在中序遍历中,A讲节点非分根节点A左右子树:即
A
DBE FC
下面看DBE序列,在前序遍历中,这三个的先后顺序是BDE,所以这三个节点中B是根节点,根据中序遍历结果,该三个节点顺序是DBE,所以B讲着三个节点划分为左右节点:结果如下:
A
B FC
D E
下面再看FC两个节点,他们在前序遍历结果中的结果是CF,所以C是这两个节点中的根节点,再根据他们在中序遍历结果中的顺序FC,则F将他们本身划分为左子树(此时为空)和右子树C,则二叉树示意图如下:
A
B C
D E 空 F
扩展资料:树的3种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。以这3种方式遍历一棵树时,若按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表、中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。
如果T是一棵空树,那么对T进行前序遍历、中序遍历和后序遍历都是空操作,得到的列表为空表。
如果T是一棵单结点树,那么对T进行前序遍历、中序遍历和后序遍历根,树根的子树从左到右依次为T1,T2,..,Tk,那么有:
对T进行前序遍历是先访问树根n,然后依次前序遍历T1,T2,..,Tk。
对T进行中序遍历是先中序遍历T1,然后访问树根n,接着依次对T2,T2,..,Tk进行中序遍历。
对T进行后序遍历是先依次对T1,T2,..,Tk进行后序遍历,最后访问树根n。
参考资料来源:百度百科-遍历

高分求二叉树的建立例题,以及三种遍历

/* bu用递归法输出中序和后续*/
#include "stdio.h"
#include "stdlib.h"
#define A 25
typedef struct Btree
{ char data;
struct Btree *lchild,*rchild;
}*tree,t2ree;
t2ree *creat()
{ tree t;
char ch;
scanf("%c",&ch);
if(ch=='#')
t=NULL;
else
{ t=(t2ree *)malloc(sizeof(t2ree));
t->data=ch;
t->lchild=creat();/* 开始格式不正确啊 ,就是我用了这个creat(r->rchild),所以对导致
指针乱算*/
t->rchild=creat();
}
return t;
}
/*显示用先序遍历*/
void preorder(tree t)
{ t2ree *s[A] ;
int top=0;
do
{ while(t!=NULL)
{ printf("%c",t->data);
if(t->rchild!=NULL)
s[top++]=t->rchild ; /*是右子树的地址*/
t=t->lchild; /* 再就是这个地方我加了一个{}结果导致了错误*/
}
if(top>=0)
t=s[--top];
}while(top>=0);
}
/* 中序遍历*/
void inorder(tree t)
{
tree s[A],p;
int top=0;
p=t;
do
{ while(p!=NULL)
{ s[top++]=p;
p=p->lchild;
}
if(top>=0)
{ p=s[--top];
printf("%c",p->data);
p=p->rchild;
}
}while(top>=0);
}
/* 后续遍历*/
void postorder(tree t)
{ int top=0,s2[A],b;
tree s1[A],p;
p=t;
do
{
while(p!=NULL)
{s1[top]=p;
s2[top++]=0;
p=p->lchild;
}
if(top>=0)
{ b=s2[--top];
p=s1[top];
if(b==0)
{ s1[top]=p;
s2[top++]=1;
p=p->rchild;
}
else
{ printf("%c",p->data);
p=NULL;
}
}
}while(top>0);
}
/* 求深度*/
int deep(tree t)
{ int i=0,j=0;
if(!t)
return 0;
else
{ i=deep(t->lchild);
j=deep(t->rchild);
}
return((i>j?i:j)+1);
}
/*求叶子的个数*/
int thief(tree t)
{ int i=0,j=0;
if(!t)
return 0;
else
{i=thief(t->lchild);
j=thief(t->rchild);
}
if(i==0&j==0)
return(1);
else
return(i+j);
}
main()
{ tree s;
s=creat();
printf("\XIAN xu shu chu \n");
preorder(s);
printf("\n kai shi zhong xu :\n");
inorder(s);
printf("\n hou xu :\n");
postorder(s);
printf("\n the shen du is %d\n",deep(s));
printf("\n the ye zi is %d\n",thief(s));
getch();
}
#include

阅读更多 >>>  为什么限制酶能重复使用

#include

#define ELEMTP int

struct node

{

ELEMTP data;

struct node *lc,*rc;

};

struct node *root;

int m=0;

main()

{

int cord;

struct node* creat();

void preorderz(struct node *t);

void inorder(struct node *t);

void postorder(struct node *t);

void deletes(struct node *t,struct node *p,struct node *f);

do

{

printf("\n 主菜单 \n");

printf(" 1 建立二叉树 \n");

printf(" 2 先序非递归遍历 \n");

printf(" 3 中序递归遍历 \n");

printf(" 4 后序递归遍历,求叶节点数 \n");

printf(" 5 删除节点 \n");

printf(" 6 结束程序运行 \n");

printf("---------------------------------------\n");

printf("请输入您的选择(1, 2, 3, 4, 5, 6)");

scanf("%d",&cord);

switch(cord)

{

case 1:

{

root=creat(); // 建立二叉树

printf("建立二叉树程序以执行完,\n");

printf("请返回主菜单,用遍历算法验证程序的正确性 \n");

}break;

case 2:

{

preorderz(root);

}break;

case 3:

{

inorder(root);

}break;

case 4:

{

postorder(root);

}break;

case 5:

{

//deletes(root)

}

case 6:

{

printf("二叉树程序执行完,再见!\n");

exit(0);

}

}

}while(cord<=6);

}

struct node* creat()

{

struct node *t,*q,*s[30];

int i,j,x;

printf("i,x=");

scanf("%d%d",&i,&x);//i是按满二叉树编号,x节点应有的序号,x是节点的数据

while((i!=0)&&(x!=0))

{

q=(struct node*)malloc(sizeof(struct node));

q->data=x;

q->lc=NULL; q->rc=NULL;

s[i]=q;

if(i==1)

t=q; //t代表树根节点

else

{

j=i/2; //双亲节点的编号

if((i%2)==0)

s[j]->lc=q;

else

s[j]->rc=q;

}

printf("i,x=");

scanf("%d%d",&i,&x);

}

return(t);

}

/*void preorderz(struct node* p)//前序非递归算法

{

struct node *q,*s[30]; //s辅助栈

int top,bools;

q=p;top=0; //栈顶指针

bools=1; //bools=1为真值继续循环;bools=0为假时栈空,结束循环

do

{

while(q!=NULL)

{

printf("%6d",q->data); //访问节点

top++;

s[top]=q;

q=q->lc;

}

if(top==0)

bools=0;

else

{

q=s[top];

top--;

q=q->rc;

}

}while(bools);

printf("\n");

}//////////////////////////结束preorderz*/

void preorderz(struct node* p)//前序递归遍历

{

if(p!=NULL)

{

printf("%6d",p->data);

inorder(p->lc);

inorder(p->rc);

}

}

void inorder(struct node* p)//中序非递归遍历

{

struct node *s[30],*q;

int top,bools;

q=p;top=0;

bools=1;

do

{

while(q!=NULL)

{

top++;

s[top]=q;

q=q->lc;

}

if(top==0)

bools=0;

else

{

q=s[top];

top--;

printf("%6d",q->data);

q=q->rc;

}

}while(bools);

}

/*void inorder(struct node* p)

{

if(p!=NULL)

{

inorder(p->lc);

printf("%6d",p->data);

inorder(p->rc);

}

}//////////////////////////结束inorder*/

void postorder(struct node* p)

{

struct node *s[30],*s2[30],*q;

int top,bools;

q=p;top=0;

bools=1;

do

{

while(q!=NULL)

{

top++;

s[top]=q;

s2[top]=1;

q=q->lc;

}

if(top==0)

bools=0;

else

{

if(s2[top]==1)

{

s2[top]=2;

q=s[top];

q=q->rc;

}

else

{

q=s[top];

s2[top]=0;

top--;

printf("%6d",q->data);

q=NULL;

}

}

}while(bools);

}

void deletes(struct node *t,struct node *p,struct node *f)

{

struct node *s,*q;

int bools=1;

if(p->lc==NULL)

s=p->rc;

else if(p->rc==NULL)

{

s=p->rc;

while(s->lc!=NULL)

{

q=s;

s=s->rc;

}

if(q==p)

q->rc=s->rc;

else

q->lc=s->rc;

p->data=s->data;

free(s);

bools=0;

}

if(bools==1)

{

if(f==NULL)

t=s;

else if(f->lc==p)

f->lc=s;

else

f->rc=s;

free(p);

}

}

/*void postorder(struct node* p)

{

if(p!=NULL)

{

postorder(p->lc);

postorder(p->rc);

printf("%6d",p->data);

if(p->lc==NULL&&p->rc==NULL)

m++; //统计叶子节点

}

}//////////////////////////结束postorder*/

#include

阅读更多 >>>  excel如何添加自定义序列

#include

typedef char datatype;

typedef struct node /*二叉树结点定义*/

{

datatype data;

struct node *lchild,*rchild;

}bintnode;

typedef bintnode *bintree;

void createbintree(bintree *t)

{/*按照前序遍历的顺序建立一棵给定的二叉树*/

char ch;

if ((ch=getchar())==' ')

*t=NULL;

else {

*t=(bintnode *)malloc(sizeof(bintnode));

(*t)->data=ch;

createbintree(&(*t)->lchild);

createbintree(&(*t)->rchild);

}

}

void preorder(bintree t)

{/*前序遍历二叉树的递归算法*/

if (t) { printf("%c",t->data);

preorder(t->lchild);

preorder(t->rchild);

}

}

main() /*主程序*/

{ bintree root;

printf("\n");

createbintree(&root);

printf("\n");

printf("\n前序遍历结果是: ");

preorder(root);

}

我们学校的, 你参考下,或许对你有用

这是前序的,

#include

#include

typedef struct node{

char data;

struct node *lchild;

struct node *rchild;

}node,*BinTree;

void inorder(node *p,int n)

{

if(p!=NULL)

{

int i;

inorder(p->lchild,n+1);

for(i=0;i
<n;i++)
printf("----------");

printf("%c",p->data);

printf("\n");

inorder(p->rchild,n+1);

}

}

void create(BinTree *p)

{

char data;

printf("Please input a word:");

scanf("%s",&data);

if(data=='#')

p=NULL;

else

{

*p=(node *)malloc(sizeof(node));

if(*p==NULL)

{

printf("Ask for free faid!\n");

exit(1);

}

(*p)->data=data;

create(&(*p)->lchild);

create(&(*p)->rchild);

}

}

void main()

{

BinTree root;

create(&root);

inorder(root,0);

}

我上机报告的代码和截图

#include

using namespace std;

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef char BiElemType;

// 二叉树的数据结构定义

typedef struct BiNode

{

BiElemType data;

BiNode *lchild,*rchild;

}BiNode,*BiTree;

//构造一棵二叉树,并且按照前序遍历的方式赋值

Status CreateBiTree(BiTree &T)

{

BiElemType ch;

cin>>ch;

if(ch=='#')T=NULL;

else

{

if(!(T=(BiNode *)malloc(sizeof(BiNode))))exit(OVERFLOW);

T->data=ch;

CreateBiTree(T->lchild);

CreateBiTree(T->rchild);

}

return OK;

}

//先序遍历

Status preorder(BiTree T)

{

if(T)

{

if(cout<

data<<' ')

if(preorder(T->lchild))

if(preorder(T->rchild))return OK;

return ERROR;

}

else return OK;

}

//中序遍历

Status inorder(BiTree T)

{

if(T)

{

if(inorder(T->lchild))

if(cout<

data<<' ')

if(inorder(T->rchild))return OK;

return ERROR;

}

else return OK;

}

//后序遍历

Status postorder(BiTree T)

{

if(T)

{

if(postorder(T->lchild))

if(postorder(T->rchild))

if(cout<

data<<' ')return OK;

return ERROR;

}

else return OK;

}

int main()

{

BiTree BiT;

cout<<"以先序顺序输入二叉树的数据,以#表示空节点:"<
<endl;
CreateBiTree(BiT);

cout<<"以中序遍历输出:";

inorder(BiT);

cout<
<endl;
cout<<"以先序遍历输出:";

preorder(BiT);

cout<
<endl;
cout<<"以后序遍历输出:";

postorder(BiT);

cout<
<endl;
return 0;

}
</endl;
</endl;
</endl;
</endl;

</n;i++)

请根据这图这棵二叉树完成如下题目:

先序遍历序列: A B D E C F中序遍历序列: D B E A C F后序遍历序列: D E B F C A二叉树示意图: A / \ B C / \ \ D E F//C语言测试程序#include "stdio.h"#include "stdlib.h"struct tree{ char data; struct tree *left; struct tree *right;};typedef struct tree treenode;typedef treenode *btree;btree createbtree(char *data,int pos,int maxPos) //递归创建法{ btree newnode; if(data[pos]==0 || pos>maxPos) { return NULL; } else { newnode=(btree)malloc(sizeof(treenode)); newnode->data=data[pos]; newnode->left=createbtree(data,2*pos,maxPos); newnode->right=createbtree(data,2*pos+1,maxPos); return newnode; }}void inorder(btree ptr){ if(ptr!=NULL) { inorder(ptr->left); printf("%C ",ptr->data); inorder(ptr->right); }}void preorder(btree ptr){ if(ptr!=NULL) { printf("%C ",ptr->data); preorder(ptr->left); preorder(ptr->right); }}void postorder(btree ptr){ if(ptr!=NULL) { postorder(ptr->left); postorder(ptr->right); printf("%C ",ptr->data); }}int main(){ btree root=NULL; int i; char data[16]={0,'A','B','C','D','E',0,'F',0,0,0,0,0,0,0,0}; root=createbtree(data,1,15); printf("二叉树的顺序存储内容: "); for(i=1;i<16;i++) { if(data[i]==0) { printf("^ "); } else { printf("%c ",data[i]); } } printf("\n先序遍历序列: "); preorder(root); printf("\n中序遍历序列: "); inorder(root); printf("\n后序遍历序列: "); postorder(root); printf("\n"); return 0;}

阅读更多 >>>  如何在linux下如何查基因的序列数

网站数据信息

"二叉树的遍历例题,数据结构关于遍历二叉树的一道题目 急 急 急 在线等啊"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:二叉树的遍历例题,数据结构关于遍历二叉树的一道题目 急 急 急 在线等啊的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!