Desciption
Given preorder and inorder traversal of a tree, construct the binary tree.
这道题很简单,先序的第一个元素就是根元素,然后在中序中找到对应的位置,则左边的就是左子树,右边的即为右子树。值得注意的是,C++切片操作很难用,所以我就用Go写的解答。最后大部分debug时间都在解决语法问题T_T
Solution
/**
* 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 := new(TreeNode)
root.Val = preorder[0]
var i int = 0
for; i < len(inorder); i++ {
if inorder[i] == preorder[0] {
break
}
}
root.Left = buildTree(preorder[1: i+1], inorder[0: i])
root.Right = buildTree(preorder[i+1: len(preorder)], inorder[i+1: len(inorder)])
return root
}