1、先序遍历第一个为树的根,先序遍历是先根再左子树最后右子树,第一个肯定是树的根,先画A,A再中序遍历中左右都有,说明A有左子树也有右子树。

2、然后看先序第一个值是B,在中序中为A的前面,所以B是A的左子树
3、继续看先序,接下来是C、D,C再中序中再B的前面,所以C是B的左子树,D在B后面,D是B的
4、接下来是E,E在中序是在D后面A前面,所以E是D的右子树
5、接着先序中是F,F在中序为A后面,是A的右子树
一、中序遍历可以想象成,按树画好的左右位置投影下来就可以了中序遍历结果:HDIBEJAFKCG
二、二叉树还有其他三种遍历
先序遍历可以想象成,小人从树根开始绕着整棵树的外围转一圈,经过结点的顺序就是先序遍历的顺序先序遍历结果:ABDHIEJCFKG
后序遍历就像是剪葡萄,我们要把一串葡萄剪成一颗一颗的。还记得我们先序遍历绕圈的路线么?就是围着树的外围绕一圈,如果发现一剪刀就能剪下的葡萄(必须是一颗葡萄),就把它剪下来,组成的就是后序遍历了。后序遍历结果:HIDJEBKFGCA
层序遍历太简单了,就是按照一层一层的顺序,从左到右写下来就行了。后序遍历结果:ABCDEFGHIJK
递归和非递归只是解决问题的方法的不同,本质还是一样的。
2. 递归算法相对于非递归算法来说效率通常都会更低 2.1 递归算法会有更多的资源需要压栈和出栈操作(不仅仅是参数,还有函数地址等)
2.2 由于编译器对附加的一些栈保护机制会导致递归执行的更加低效 3. 使用循环代替递归算法,通常可以获得更好的执行效率和空间效率,在二叉树层次较深的情况下,采用非递归方式遍历能够有效的提升遍历的性能。
后序遍历说明E是根节点,可见在中序中E的左边是左子树,右边是右子树,可知左子树只有一个D 节点, 再看后序遍历中ACB序列说明B是右子树的根节点, 在中序中找到B,发现B没有左子树, 就是说AC都在B的右子树上, 又知道后序遍历中顺序是AC 说明 A是C的子节点, 而中序顺序是AC说明A在C的左子树上, 前序:EDBCA
答案是高度等于其节点数的二叉树;
先序遍历顺序是:M-L-R,后序遍历顺序是:L-R-M,可以看到,只有中间的结点(M)顺序变化了,左右结点相对位置是不变的;
那可以推断出,要满足题意的话“二叉树的先序序列与后序序列正好相反”,说明整个二叉树左子树或者右子树有一个没有(遍历就成了,先:M-L ;后:L-M 或者 先:M-R ;后:R-M )也就是必然是一条链。因此该二叉树的高度一定等于其节点数。