二叉树根据图片怎么算遍历

作者&投稿:书生 (若有异议请与网页底部的电邮联系)
怎么根据二叉树的两个遍历算出另一个遍历,有什么技巧~

用递归法可画出二叉树图然后看图写出你要的遍历哈,下面我给你讲下哈(好理解的):

假设有棵树,长下面这个样子,它的前序遍历,中序遍历,后续遍历都很容易知道。



PreOrder: GDAFEMHZ
InOrder: ADEFGHMZ
PostOrder: AEFDHZMG

现在,假设仅仅知道前序和中序遍历,如何求后序遍历呢看比如,已知一棵树的前序遍历是地GDAFEMHZ地,而中序遍历是地ADEFGHMZ地应该如何求后续遍历?

第一步,root最简单,前序遍历的第一节点G就是root。

第二步,继续观察前序遍历GDAFEMHZ,除了知道G是root,剩下的节点必然是root的左右子树之外,没法找到更多信息了。

第三步,那就观察中序遍历ADEFGHMZ。其中root节点G左侧的ADEF必然是root的左子树,G右侧的HMZ必然是root的右子树。

第四步,观察左子树ADEF,左子树的中的根节点必然是大树的root的leftchild。在前序遍历中,大树的root的leftchild位于root之后,所以左子树的根节点为D。

第五步,同样的道理,root的右子树节点HMZ中的根节点也可以通过前序遍历求得。在前序遍历中,一定是先把root和root的所有左子树节点遍历完之后才会遍历右子树,并且遍历的右子树的第一个节点就是右子树的根节点。
如何知道哪里是前序遍历中的左子树和右子树的分界线呢看通过中序遍历去数节点的个数。
在上一次中序遍历中,root左侧是A、D、E、F,所以有4个节点位于root左侧。那么在前序遍历中,必然是第1个是G,第2到第5个由A、D、E、F过程,第6个就是root的右子树的根节点了,是M。

第六步,观察发现,上面的过程是递归的。先找到当前树的根节点,然后划分为左子树,右子树,然后进入左子树重复上面的过程,然后进入右子树重复上面的过程。最后就可以还原一棵树了。
第七步,其实,如果仅仅要求写后续遍历,甚至不要专门占用空间保存还原后的树。只需要稍微改动第六步,就能实现要求。仅需要把第六步的递归的过程改动为如下:
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。




我上面给你找出了一部分,你只要重复我上面的方法就可以找出其他的,加油,慢慢体会,你行的,不清楚再问我。

知道先序遍历,就能求出根,知道中序遍历,可知左子树与右子树。因为后序遍历是根-左-右,比如:——
2.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是()
A)bdgcefha
B)gdbecfha
C)bdgaechf
D)gdbehfca
答案为 D

因为在先序中,a在第一位,故a是根,那么在中序中在a前的是左子树,在a后的是右子树.在a的左子树dgb中,在前序中b在前,故b是左子树的根,b的左子树是dg,无右子树.依次类推.
思路是:在前序中找根,在中序中分开左右子树.
最后,二叉树的样子是这样的:
a
b c
d e f
g h
这样就能看出来后序.
按这个顺序就能答出来了

前序中序后序指的是节点的访问顺序, 前序就是先访问节点, 再用前序遍历访问节点的左子树, 最后用前序遍历访问节点的右子树.
中序遍历就是先用中序遍历访问节点的左子树, 再访问节点, 最后用中序遍历访问节点的右子树.
后序遍历是先用后序遍历访问节点的左子树, 再用后序遍历访问节点的右子树, 最后访问节点.
所以这个访问你也能看出, 相当于一个递归.
对于你的图, 可以这样拆解
前序遍历是 0节点 ( 0的左子树) ( 0的右子树) = 0节点 ( 1节点 (1的左子树) (1的右子树)) ( 2节点 (2的左子树)(2的右子树)) 以此类推, 最后得出前序遍历 : 0 1 3 7 8 4 9 10 2 5 11 12 6 13 14.
中序遍历同样, 只是拆解的方式改成节点在中间 (0的左子树) 0节点 ( 0的右子树) = ( (1的左子树) 1节点 (1的右子树)) 0节点 ( (2的左子树) 2节点 (2的右子树))
= ( ((3的左子树) 3节点 (3的右子树)) 1节点 ((4的左子树) 4节点 (4的右子树)) ) 0节点 ( ((5的左子树) 5节点 (5的右子树)) 2节点 ((6的左子树) 6节点 (6的右子树)) )
所以, 得出中序遍历 7 3 8 1 9 4 10 0 11 5 12 2 13 6 14
同样的, 后序遍历你就按照 ( 0的左子树) (0的右子树) 0节点 = ( (1的左子树) (1的右子树) 1节点 ) ( (2的左子树)(2的右子树) 2节点) 0节点 这样去拆解就可以了.
最后可以得出后序遍历为 7 8 3 9 10 4 1 11 12 5 13 14 6 2 0


二叉树根据图片怎么算遍历
所以, 得出中序遍历 7 3 8 1 9 4 10 0 11 5 12 2 13 6 14 同样的, 后序遍历你就按照 ( 0的左子树) (0的右子树) 0节点 = ( (1的左子树) (1的右子树) 1节点 ) ( (2的左子树)(2的右子树) 2节点) 0节点 这样去拆解就可以了.最后可以...

已知一棵二叉树的先序遍历序列为ABDGHCEIF,它的中序遍历序列是BGDHAEI...
根据先序遍历和中序遍历,我们可以将这颗二叉树画出来,如下图。所以,根据图片,得出层次遍历序列为:ABCDEFGHI。

什么是四叉树,数据结构的。有图例最好,谢谢。
四叉树可以用来在数据库中放置和定位文件(称作记录或键)。这一算法通过不停的把要查找的记录分成4部分来进行匹配查找直到仅剩下一条记录为止。在树中,记录被存储在叶子的位置上。这一名字的由来是因为记录被存储在端点上,它们上面再没有节点了。分支被称作节点。数的顺序是每节点的分支(也称孩子)...

二叉排序树的定义
二叉排序树(Binary Sort Tree),首先它是一棵树,“二叉”这个描述已经很明显了,就是树上的一根树枝开两个叉,于是递归下来就是二叉树了(下图所示),而这棵树上的节点是已经排好序的,具体的排序规则如下:若左子树不空,则左子树上所有节点的值均小于它的根节点的值 若右子树不空,则右字数...

二叉树的深度和高度有什么区别??
高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数。三、计算方式不同 1、二叉树深度算法如下:深度为m的满二叉树有2^m-1个结点;具有n个结点的完全二叉树的深度为[log2n]+1.(log2n是以2为底n的对数)。2、分析二叉树的深度(高度)和它的左、右子树深度之间的关系。...

一棵有124个叶结点的完全二叉树,最多有多少结点?
最多有248个结点。根据完全二叉树性质,叶子结点数n0等于树结点数n的二分之一,即n0=n\/2 ,或叶子结点数n0等于树结点数n加上1之和的二分之一,即n0=(n+1)\/2。两个公式变形得,n=2*n0或n=2*n0-1,题中要求树的最多结点数,即树的结点数等于叶子数的2倍,n=2*n0=2*124=248。

哈夫曼树是什么?求解
树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。哈夫曼在上世纪五十年代初就提出这种编码时,根据字符出现的概率来构造平均长度最短的编...

有二叉树中序序列为DCBGEAHFIK,后序序列为DCEGBFHKIA,画出此二叉树!请...
从图片上看,首先后续遍历最后一个一定是根A 将树分为左子树DCBGE ,右子树HKIA 然后看右子树HFIK ,后序中最后一个是右子树根I 结合中序遍历,同样将右子树分为左右子树,左子树为HF,右子树为k,一步一步这样分析,就得到如图所示的二叉树了 ...

pascal中二叉树是什么?怎么用,求程序
2叉树就是一种树 图片如下:这就是一颗典型的二叉树。二叉树是很多算法的基础。要好好学!!!IOI中国队的未来就在你身上了!!

二叉树什么意思
如果文字表达的话就是下面的,若看不懂,可以在百度的图片搜索里输入二叉树找张图对照着比划下,应该能看懂。概念并不是很难。说简单点就是一个点分两个叉,这两个叉又分别分两个叉(搜张图就明白这句了)。~~~树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分...

克东县18669126667: 二叉树根据图片怎么算遍历 -
空友甲磺: 前序中序后序指的是节点的访问顺序, 前序就是先访问节点, 再用前序遍历访问节点的左子树, 最后用前序遍历访问节点的右子树.中序遍历就是先用中序遍历访问节点的左子树, 再访问节点, 最后用中序遍历访问节点的右子树.后序遍历是先...

克东县18669126667: 根据下图给出的二叉树,求出先序遍历、中序遍历和后序遍历的结点序列 a / \ b c / / d e \ f -
空友甲磺: 先序遍历abdcef 中序遍历dbaefc 后序遍历dbfeca 其实这种问题的解法很简单,你绕着二叉树从根节点左边画一条线绕过整个2叉树然后回到根节点,先序遍历就是线经过左边的时候的顺序,中序遍历就是线经过下面的时候的顺序,后续遍历就是经过右边的时候的顺序,掌握方法了终身都不用问别人了!见下图

克东县18669126667: 数据结构二叉树怎么遍历啊?? -
空友甲磺: 拿先序遍历举例: 先序遍历 是根左右 先遍历根A,然后遍历A的左子树(是左面那一群),然后遍历A的右子树(为空). 在A的左子树中,先遍历根也就是B,在遍历B的左子树也就是C,在遍历B的右子树,是右边的一群. 在B的右子树中继续…………

克东县18669126667: 二叉树的遍历算法 -
空友甲磺: 递归算法的实现是依据栈来做的,建议你看一下关于这方面的内容. preorder()函数功能为:若当前结点不为空,则打印当前值,并递归调用打印左右结点. preorder()函数在每次递归调用前,先将下一条指令地址和参数压栈,即在执行...

克东县18669126667: 请教一下数据结构 二叉树的先序遍历 中序遍历 后序遍历 是怎么弄的 -
空友甲磺: 所谓先序、中序和后序的区别在于访问根的时机,分别是BLR、LBR和LRB,其中B、L、R分别表示根结点、根结点的左子树和根结点的右子树.以后序遍历为例进行讲解.后序遍历算法:(1) 后序遍历根结点的左子树;(2) 后序遍历根结...

克东县18669126667: 我想问下,二叉树的遍历如何看图?例如前序的话,是先经过根结点后经过叶子结点吗?求指教~~ -
空友甲磺: 前序遍历:根节点访问后,序遍历左子树,序遍历右子树中序遍历:中序遍历左子树,根节点访问,中序遍历右子树后序遍历:后序遍历左子树,后序遍历右子树,根节点访问.

克东县18669126667: 计算机二级二叉树的遍历,求教 -
空友甲磺: 中序遍历:DBEAFC先序遍历:ABDECF 后续遍历:DEBFCA 先中后都是对于根节点来说的.

克东县18669126667: 二叉树的建立,二叉树的遍历. -
空友甲磺: #include "stdio.h"//二叉树的练习 typedef struct BiTNode { char data; /*结点的数据域*/ struct BiTNode *lchild , *rchild; /*指向左孩子和右孩子*/ } BiTNode , *BiTree;/*创建一棵二叉树*/ CreatBiTree(BiTree *T) { char c; c = getch(); printf("get = ...

克东县18669126667: 请问二叉树的叶子节点数和深度分别用到什么遍历方法?? -
空友甲磺: 叶子结点用广度遍历,深度用深度遍历.至于你提到的遍历顺序,先 中 后都是可以的.计算叶子结点数可以制作一个计数器.给你提供个计算叶子结点数的简单算法,希望对你理解有帮助. intleafNum(BiTree T) { if(!T) return (0); if(!T->lchild&&!T->Tchild)return (1); return(LeafNum(T->lchild)+LeafNum(root->rchild)); }

克东县18669126667: 怎么根据先序遍历,后序遍历结果画出二叉树 -
空友甲磺: ,这个问题我以前回答过了 凑合着看吧 很显然你还不懂的遍历一棵二叉树的原理 当你拿到一棵二叉树,无论它的形状如何的千奇百怪 我们都可以将它按照如下的方式划分 根 / \ 左子树 右子树 一棵有很多个节点的二叉树可以划分为以上的形式 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网