二叉树先序遍历
前两天面试,看见了个笔试题,关于二叉树的,今天算是把自己的一点理解写下来吧。
今天看网文,才想起来,二叉树的先序遍历、中序遍历、后序遍历,
遍历顺序都是相对于父节点写的,也就是先遍历父节点、中间遍历父节点,最后遍历父节点。
讲完理论,来看一下今天理解的一个二叉树题
先序遍历:FBACDEGH
中序遍历:ABDCEFGH
一下只适用于已知先序遍历和中序遍历的情况进行的分析:
//①判断传过来的树的中序遍历是否为空
//②找到树的先序遍历中第一个节点
//③找到这个节点在中序遍历中的位置
//④这个节点左边即为它的左树,右边即为它的右树
//⑤判断这个节点的左树是否为空,为空的话判断这个节点右边是否为空
有全局变量:firstTree
middleTree
firstIndex=0
1、firstTree = FBACDEGH;
middleTree = ABDCEFGH;
2、执行①,向①中传参数,判断middleTree:ABDCEFGH
返回判断结果true;
3、执行②,向②中传参数:FBACDEGH
取到相应位置firstIndex的节点,超出FBACDEGH 的长度则跳出;
取到F
4、执行③,向③中传参数:ABDCEFGH
返回F位置middleIndex=5;
5、执行④,向④中传参数:ABDCEFGH
leftTree = ABDCE
rightTree = GH
6、执行⑤,向⑤中传参数:ABDCEFGH,index=5
if(leftTree不为空){
middleTree= leftTree;
}else{
middleTree= rightTree;
}
7、重复 2~7
以下就是我得到的二叉树:
以前只是做了题,这也是我第一次梳理算法的代码流程
以上就是我的理解了,有不对的或者需要修改的,大家可以指出来
要去准备面试的材料了,代码以后再补吧。
还没有评论,来说两句吧...