已知先序遍历和中序遍历,输出后序遍历

已知先序遍历和中序遍历,输出后序遍历

题目描述

对于一棵二叉树,已知先序遍历ACDEFHGB,中序遍历DECAHFBG,求后序遍历。

解题思路

首先条件给出了先序遍历和中序遍历,那么我们利用这两种遍历特性得到一下信息:

  • 对于先序遍历,第一个节点是根节点
  • 对于中序遍历,根节点的左边是左子树节点,右边是右子树节点

利用以上信息我们就可以利用递归构建出二叉树,然后通过后序遍历得到结果

Python代码如下

class TreeNode:
    def __init__(self,x):
        self.val = x
        self.left =None
        self.right =None
class Solution:
    #返回构造的TreeNode根节点
    def reConstructBinaryTree(self,pre,tin):
        if len(pre) == 0:
            return None
        root = TreeNode(pre[0])
        TinIndex = tin.index(pre[0])
        root.left = self.reConstructBinaryTree(pre[1:TinIndex+1],tin[0:TinIndex])
        root.right = self.reConstructBinaryTree(pre[TinIndex+1:],tin[TinIndex+1:])
        return root
    def PostTraversal(self,root):
        if root != None:
            self.PostTraversal(root.left)
            self.PostTraversal(root.right)
            print(root.val)

pre = ['A','C','D','E','F','H','G','B']
tin = ['D','E','C','A','H','F','B','G',]
S = Solution()
root = S.reConstructBinaryTree(pre,tin)
S.PostTraversal(root)

猜你喜欢

转载自blog.csdn.net/qq_25174673/article/details/84898351