[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/

posted @ 2021-11-14 10:44  梦想是能睡八小时的猪  阅读(28)  评论(0)    收藏  举报