Leetcode 105. 从前序与中序遍历序列构造二叉树

35 阅读1分钟

题目连接

解题思路

  1. 根据先序遍历确定根节点
  2. 根据中序遍历确定左右子树
  3. 逐层进行递归构造

复杂度分析

O(n)

示例代码

func buildTree(preorder []int, inorder []int) *TreeNode {
   if len(preorder) == 0 || len(inorder) == 0 {
      return nil
   }


   val := preorder[0]
   root := &TreeNode{Val: val}
   index := getIndex(inorder, val)
   root.Left = buildTree(preorder[1:index+1], inorder[:index])
   root.Right = buildTree(preorder[index+1:], inorder[index+1:])


   return root
}


func getIndex(order []int, element int) int {
   index := 0


   for i := 0; i < len(order); i++ {
      if order[i] == element {
         index = i
      }
   }


   return index
}