二叉树遍历java二叉树遍历java代码实现

2024-04-24 23:04:44 浏览

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

二叉树遍历java二叉树遍历java代码实现

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 )也就是必然是一条链。因此该二叉树的高度一定等于其节点数。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。