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

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

思路

递归法。

  • 前序遍历为:[root][左子树][右子树]

  • 中序遍历为:[左子树][root][右子树]

因此先根据前序遍历中root的值找到中序遍历中root的位置,然后分别从前序遍历和中序遍历中截取一段用来构造左右子树。

Code

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func buildTree(preorder []int, inorder []int) *TreeNode {
	if len(preorder) == 0 {
		return nil
	}

	root := &TreeNode{Val: preorder[0]}
	if len(preorder) == 1 {
		return root
	}

	for i := 0; i < len(inorder); i++ {
		if inorder[i] == preorder[0] {
			root.Left = buildTree(preorder[1:len(inorder[:i])+1], inorder[:i])
			root.Right = buildTree(preorder[len(inorder[:i])+1:], inorder[i+1:])
            break
		}
	}

	return root
}

Last updated

Was this helpful?