[Leetcode]24.從前序與中序遍歷序列構造二叉樹
阿新 • • 發佈:2021-11-14
題目:給定一棵樹的前序遍歷preorder
與中序遍歷inorder
。請構造二叉樹並返回其根節點。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
思想:遞迴,建立一個空結點,值為先序的首個元素,在中序遍歷中找先序遍歷的首個元素,找到後,將兩個切片分割為兩個新的小切片
preorder[1:r+1], inorder[:r],
preorder[r+1:], inorder[r+1:]func buildTree(preorder []int, inorder []int) *TreeNode { var r int = 0 if len(preorder) == 0 { return nil } root := &TreeNode{} root.Val = preorder[0] for i := 0; i < len(inorder); i++ { if inorder[i] == preorder[0] { r = i break } } root.Left = buildTree(preorder[1:r+1], inorder[:r]) root.Right = buildTree(preorder[r+1:], inorder[r+1:]) return root }
題目來源:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/