二叉树问题证明?谢谢高手指教!

证明:如果一棵二叉树的后序序列是,p1,p2,p3,p4,p5,p6.....pn,,中序序列是,pa1,pa2,pa3,pa4,pa5,pa6......,pan,则由序列1,2,…,n可通过一个栈得到序列a1,a2,a3,a4,a5,a5......an,。

思路是:后序遍历原则是:左右父;中序遍历原则是左父右。所以我们将后序遍历序列入栈后再按中序遍历原则从栈中得到结点。
将后序序列依次入栈:pn最先入栈,接着用p(n-1)压栈如此直至p1入栈。按照岀栈规则:先入后出,后入先出。p1先出栈,接下来是p2。判断p2是否为父节点,不是就将下一个结点岀栈。再判断是否为父节点,是就将之前结点重新入栈。这样我们就得到了一个孩子结点和父节点接下来再判断此时栈中最顶端的结点是否为孩子结点,如果不是就继续前面的判断循环。如此循环直至栈为空。
以上仅为理论参考,实际编程时要进一步考虑孩子结点是左结点还是右结点。希望对楼主能有所帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-06
后序遍历时利用栈来实现,即依次将根节点,右孩子,左孩子入栈;然后再依次出栈即得到序列
1,2,。。。,n ;中序遍历又可以用后序遍历的结果来实现,即先弹出栈顶,在弹出下个元素i,如果元素i的左孩子不为栈顶进入另一个栈T,则接着弹下个元素,再继续判断,知道弹出元素为栈顶时输出,再对T进行操作,和第一个栈的操作一致。追问

但要求是通过一个栈的哦?

相似回答