怎么写二叉树的先序遍历、中序遍历、后序遍历?

作者&投稿:广国 (若有异议请与网页底部的电邮联系)
~ 一、
先序遍历

1、访问根节点
2、
前序遍历

子树

3、前序遍历
右子

二、
中序遍历

1、中序遍历左子树
2、访问根节点
3、中序遍历右子树
三、
后序
遍历:
1、
后序遍历
左子树
2、后序遍历右子树
3、访问根节点
下面介绍一下例子与方法:
1、画树求法:
第一步,根据前序遍历的特点,我们知道
根结点
为G
第二步,观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。
第三步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。
第四步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的左子树的第一个节点就是左子树的根节点。同理,遍历的右子树的第一个节点就是右子树的根节点。
第五步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树重复上面的过程,然后进入右子树重复上面的过程。最后就可以还原一棵树了。该步递归的过程可以简洁表达如下:
1
确定根,确定左子树,确定右子树。
2
在左子树中递归。
3
在右子树中递归。
4
打印当前根。
那么,我们可以画出这个
二叉树
的形状:
那么,根据后序的遍历规则,我们可以知道,后序遍历顺序为:AEFDHZMG
二叉树的一些介绍:
在计算机科学中,二叉树是每个节点最多有两个子树的
树结构
。通常子树被称作“左子树”(left
subtree)和“右子树”(right
subtree)。二叉树常被用于实现
二叉查找树

二叉堆

二叉树的每个结点至多只有二
棵子
树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。
一棵深度为k,且有2^k-1个节点称之为
满二叉树
;深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为
完全二叉树


已知一棵二叉树的前序遍历的结果是ABECDFGHIJ, 中序遍历的结果是EBCDAF...
答:前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回。因此,A是根结点,B是A的左子树,F是A的右子树。E是B的左子树,C是B的右子树,...

设有某二叉树,其前序遍历序列是ABCDEFGH,中序遍历序列是CBDAFGEH,试...
答:A(B(C.D)E(F.G(H)))先看先序,其第一个为树的根,先序遍历是先根再左子树最后右子树,第一个肯定是树的根,先画A,A再中序遍历中左右都有,说明A有左子树也有右子树。

一颗二叉树前序遍历和中序遍历分别是ABDEGCFH、DBGEACHF,则此后序遍...
答:后序遍历是DGEBHFCA。前序遍历的第一个节点为根节点,由前序遍历可知,A为根节点。中序遍历的根节点前面的节点均为左子树的节点,所以左子树上的节点为DBGE。去掉根节点和左子树节点,右子数节点为CHF。前序遍历的第二个节点为B,由2知B为左子树节点,所以B为左子树的根节点。在二叉树中,求后...

用汇编实现二叉树的先序,中序,后序遍历
答:typedef struct BTNode{ ElemType data;struct BTNode *lchild,*rchild;}BTNode,* BiTree;void CreateBiTree(BiTree &T){//按先序次序输入,构造二叉链表表示的二叉树T,空格表示空树 // if(T) return;char ch;ch=getchar(); //不能用cin来输入,在cin中不能识别空格。if(ch==' ') T=...

怎样通过前序遍历和中序遍历确定二叉树的形式?
答:以下面的例题为例进行讲解:已知一棵二叉树的先序遍历序列和中序遍历序列分别是abdgcefh、dgbaechf,求二叉树及后序遍历序列。分析:先序遍历序列的第一个字符为根结点。对于中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列。

...和非递归方法实现二叉树的先序、中序和后序遍历。
答://先序遍历二叉树T的非递归算法 while(!(T==NULL&&top==NULL)){ if(T){ printf("%d ",T->data);push(T);T=T->lchild;} else { T=(BiTree)pop();T=T->rchild;} } } Status InOrderTraverse(BiTree T){ //中序遍历二叉树T的递归算法 if (T){ if (T->lchild) InOrder...

二叉树的前序中序后序怎么看
答:二叉树的前序中序后序看法如下:先序遍历(先根遍历):先访问根节点,然后访问左子树,最后访问右子树。例如,对于二叉树1一2一3一4一5,先序遍历的结果为1一2一3一4一5。中序遍历(中根遍历):先访问左子树,然后访问根节点,最后访问右子树。例如,对于二叉树1一2一3一4一5,中序遍历的...

建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历...
答:Inorder(T->rchild);//中序遍历右字树 } } void Postorder(BTree T)//后序遍历 { if(T){ Postorder(T->lchild);Postorder(T->rchild);printf("%c",T->data);} } int TreeDepth(BTree T)//后序遍历求二叉树的深度,结点数和叶子数 { int hl,hr,max;if(T){ hl=TreeDepth(T->...

已知二叉树的先序遍历序列为“ABDECFG”和中序遍历序列“DBEAGFC...
答:1 先序序列 顺序是 根左右 首先出现的是根 中序序列 是左根右 以 第一个为例 先序 中 A 是根 节点 再 看中序 A左边的是 左子树 (DBE)A 右边的是右子树 (GFC)。然后之后的都和这个差不多 不懂的话还可以看看我的这个回答,更加的详细。更多参考资料 3 二叉树实际图形 层次遍历: ...

建立任意二叉树的二叉链表存储,并对其进行先序、中序、后序遍历。
答:void CreateBiTree(bitree **T) { //按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树,//构造二叉链表表示二叉树 char ch;scanf("%c",&ch);if(ch=='#') *T=NULL;else{