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?