二叉树的遍历算法

来源:百度知道 编辑:UC知道 时间:2024/05/21 09:43:55
已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为?我要详解,算法写出来,谢谢

怎么又来问了,不是回答过你了吗?很简单,就是一个递归过程。在函数中以先序遍历的第一个结点在中序遍历中为界把中序遍历分为两半,再分别把左一半和右一半作为这个结点的左子树和右子树进行递归。完成递归之后再打印该结点即可。结束递归的条件是左子树或右子树没有结点。下面是简单的程序示意,可以用任意语言实现。

不过你给出的这个前序遍历和中序遍历却是有问题的,如果改成ABDEGCFH和DBGEAFCH的话其后序遍历就是:D G E B F H C A

import sys

rflist = list(sys.argv[1])
rmlist = list(sys.argv[2])

def printTreeRootLast(r, rflist, rmlist):
r[0] = rflist.pop(0)

rmLeftNodes = rmlist[:rmlist.index(r[0])]
if len(rmLeftNodes) == 0:
r[1] = None
else:
r[1] = [None, None, None]
printTreeRootLast(r[1], rflist, rmLeftNodes)

rmRightNodes = rmlist[rmlist.index(r[0])+1:]
if len(rmRightNodes) == 0:
r[2] = None
else:
r[2] = [None, None, None]
printTreeRootLast(r[2], rflist, rmRightNodes)

print r[0],

root = [None, None, None]
printTreeRootLast(root, rflist, rmlist)<