Skip to content

Latest commit

 

History

History
31 lines (26 loc) · 888 Bytes

07. 重建二叉树.md

File metadata and controls

31 lines (26 loc) · 888 Bytes

解题思路

前序遍历顺序为:根左右,中序遍历顺序为:左根右,可以根据前序和中序数组中的"根"来划分出左右子树,递归构建出树,所以步骤为:

  1. 前序的根肯定是在第一个 0
  2. 根据前序的根去中序中找到根所在位置 idx
  3. 根据根切割,前序的左子树是 [1:idx+1](包含 idx),右子树是 [idx+1:]
  4. 根据根切割,中序的左子树是 [:idx],右子树是 [idx+1:]
func buildTree(pre []int, in []int) *TreeNode {
    if len(pre) == 0 {
        return nil
    }
    root := &TreeNode{Val:pre[0]}
    idx := 0
    for i, v := range in {
        if pre[0] == v {
           idx = i
           break
        }
    }
    root.Left = buildTree(pre[1:idx+1], in[:idx])
    root.Right = buildTree(pre[idx+1:], in[idx+1:])
    return root
}