【数据结构】-树-后序遍历详述-前中后序遍历中栈的规律

【数据结构】-树-后序遍历详述-前中后序遍历中栈的规律_第1张图片

1.访问完b的左子树后,回到b,此时不能访问b

2.访问完b的右子树后,回到b,此时访问b,访问完b之后,将b归空,只要b被访问,说明它的左右子树已经访问结束,不需要再用了。如果没有右子树,直接访问b。

那么,如何判断上面两种情况?

第一:每个节点添加isfirst标记,初始化为true,表示第一次出现在栈顶,也就是第一种情况,此时需要获取右子,而不是访问。

第二:添加一个指针指向上一个访问的节点。如果右子等于上一个访问的节点,或者右子为空,那么直接访问b,否则,右子入栈。

【数据结构】-树-后序遍历详述-前中后序遍历中栈的规律_第2张图片

【数据结构】-树-后序遍历详述-前中后序遍历中栈的规律_第3张图片

关于后序遍历栈的一个结论:

访问:d

栈:a,b,d

 

访问:g

栈:a b e g

 

访问:e

栈:a,b

 

结论:访问某个节点时,栈中的所有元素恰好是该节点的所有祖先(算法实现:https://blog.csdn.net/qq_39328436/article/details/106788087)。从栈底到栈顶刚好是根节点到该节点的路径

利用这个性质可以求路径,也可以求最近祖先节点

 

关于先序和中序遍历栈的一个结论:

由于先序算法中,是先访问该节点再入栈

中序算法中是,出栈该节点,再访问。

所以先序对应入栈序列,中序对应出栈序列

你可能感兴趣的:(王道数据结构,树)