已知前序和中序,求后序遍历:
前序:ABDECFG 中序:DBEAFCG
思路简单:前序的第一个节点就是根节点,
中序中找到根节点的位置,根节点之前是其左子树,之后是右子树
按此顺序,依次在左子树部分遍历,右子树部分遍历
总结性的说:前序负责构建树的节点,中序负责划分左子树和右子树,如果不存在,就是左子树,则表示左节点为空。
超级简单的python代码如下:
def reConstructBinaryTree(self, pre, tin):
if not pre or not tin:
return None
root = TreeNode(pre.pop(0))
index = tin.index(root.val)
root.left = self.reConstructBinaryTree(pre, tin[:index])
root.right = self.reConstructBinaryTree(pre, tin[index + 1:])
return root
C++ 代码:将后序遍历保存输出
1 2 3 4 5 6 7 8 |