树的后序遍历是指先依次后序遍历每棵子树,然后访问根结点。当树用二叉树表示法(也叫孩子兄弟表示法)存储时,可以找到唯一的一棵二叉树与之对应,我们称这棵二叉树为该树对应的二叉树。那么根据这个法则可知,树的后序遍历序列等同于该树对应的二叉树的中序遍历。
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上。
⑴访问结点本身(N),
⑵遍历该结点的左子树(L),
⑶遍历该结点的右子树(R)。
以上三种操作有六种执行次序:
NLR、LNR、LRN、NRL、RNL、RLN。
注意:
前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上。
扩展资料:
二叉树前序访问如下:
从根结点出发,则第一次到达结点A,故输出A;
继续向左访问,第一次访问结点B,故输出B;
按照同样规则,输出D,输出H;
当到达叶子结点H,返回到D,此时已经是第二次到达D,故不在输出D,进而向D右子树访问,D右子树不为空,则访问至I,第一次到达I,则输出I;
I为叶子结点,则返回到D,D左右子树已经访问完毕,则返回到B,进而到B右子树,第一次到达E,故输出E;
向E左子树,故输出J;
按照同样的访问规则,继续输出C、F、G。
二叉树中序访问如下:
从根结点出发,则第一次到达结点A,不输出A,继续向左访问,第一次访问结点B,不输出B;继续到达D,H;
到达H,H左子树为空,则返回到H,此时第二次访问H,故输出H;
H右子树为空,则返回至D,此时第二次到达D,故输出D;
由D返回至B,第二次到达B,故输出B;
按照同样规则继续访问,输出J、E、A、F、C、G。
参考资料来源:百度百科-二叉树
参考资料来源:百度百科-二叉树遍历
中序序列。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
如图所示二叉树,中序遍历结果:DBEAFCG
中序遍历数学表达式形式:
当对一棵数学表达式树进行中序,前序和后序遍历时,就分别得到表达式的中缀、前缀和后缀形式。中缀(infix)形式即平时所书写的数学表达式形式,在这种形式中,每个二元操作符(也就是有两个操作数的操作符)出现在左操作数之后,右操作数之前。在使用中缀形式时,可能会产生一些歧义。
例如,x+y ×z可以理解为(x+y) ×z或x+ (y ×z)。为了避免这种歧义,可对操作符赋于优先级并采用优先级规则来分析中缀表达式。在完全括号化的中缀表达式中,每个操作符和相应的操作数都用一对括号括起来。
更甚者把操作符的每个操作数也都用一对括号括起来。如( (x) + (y) ),( (x) + ( (y) * (z) ) )和( ( (x) + (y) ) * ( (y) + (z) ) ) * (w)。
树和二叉树不同。
二叉树是每个节点只有左右两个孩子,而树有可能有多个节点。
每一棵树都可以转化为一棵对应的二叉树,具体方法为:将每个节点除最左边孩子外的其余孩子切断连接,将被切断的孩子连接到最左边孩子下方,当作其右子树。具体图像分析自行百度。换句话说,你以前是我的兄弟,现在是我的儿子(右)。
为什么树的后根遍历等同于二叉树的中序遍历呢?
其实树的后根遍历是先访问每个节点的左子树,然后其余子树,然后根。而其对对应的二叉树,即先访问该节点的左子树,然后访问该节点左子树的右子树(树对应的二叉树就是把原先节点的其他孩子都划归到左子树下),最后访问根。重点在于:我们所说的访问左子树是一个递归的过程,即一直迭代到最左边的叶子处,访问完了之后,对于原先的树而言下一个要访问的是这个最左边叶子的兄弟节点(后序遍历);对应于二叉树,这些兄弟节点变成了该叶子节点的右子树!因此,原先树的访问即是最左叶子→右边若干个兄弟子树→父亲节点;而对应到二叉树,则是最左节点(即该节点没有左子树了!)→该叶子的右子树(如果有的话就访问,访问完相当于把这最左的子树访问完了)→父亲节点。这一步完成之后,原先的树就要找父亲节点的兄弟节点(因为是后序遍历),而对应到二叉树,父亲节点原先的兄弟节点不就是现在的右子树吗?所以,二叉树就变成了左子树→左子树的父亲→右子树,中序遍历的顺序。
概念上就是这么回事,你也可以只记一个结果。像这些树的转换带来的问题大多结症都在定义上,只要明白树怎么转换成二叉树,其他自己画一下就行了。
先根遍历、中根遍历、后根遍历
先序遍历、中序遍历、后序遍历
是对同一种问题的两种说法。
二叉树的先根遍历序列与其对应的二叉树的中序序列相同,仅有一种特例:即该二叉树的各结点仅有右子树,也就是一棵退化了的右偏的线性序列。