Python刷leetcode--剑指 Offer 07.重建二叉树

树的问题需要多往递归上想。
然后中序遍历是三种遍历中最关键的遍历。
中序遍历找到先序遍历后 先序遍历之后的几个 = 中序遍历左边的几个

image-20200705191736208

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def buildTree(self, preorder, inorder):
        # def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        # leetcode submit region end(Prohibit modification and deletion)
        if not preorder:
            return None
        node = TreeNode(preorder[0])
        index = inorder.index(preorder[0])
        l_p = preorder[1:index + 1]
        r_p = preorder[index + 1:]
        l_i = inorder[0:index]
        r_i = inorder[index + 1:]
        node.left = self.buildTree(l_p, l_i)
        node.right = self.buildTree(r_p, r_i)
        return node


def range_tree(root):
    if not root:
        return
    range_tree(root.left)
    print(root.val)
    range_tree(root.right)


if __name__ == '__main__':
    sol = Solution()
    preorder = [3, 9, 20, 15, 7]
    inorder = [9, 3, 15, 20, 7]
    ans = sol.buildTree(preorder, inorder)
    range_tree(ans)
    #  前序遍历 preorder = [3,9,20,15,7]
    #  中序遍历 inorder = [9,3,15,20,7]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值