[Leetcode]24.从前序与中序遍历序列构造二叉树
题目:给定一棵树的前序遍历 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/