描述
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder =[3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
思路
前序遍历的第一个数肯定是root节点 然后在inorder中以找到的root节点为分割线 前面为左子树 后面为右子树 然后根据inorder中左子树和右子树的个数 去找preorder中的 左子树和右子树 然后递归
实现
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0{
return nil
}
root := new(TreeNode)
root.Val = preorder[0]
leftInTree := make([]int, 0)
rightInTree := make([]int, 0)
leftPreTree := make([]int, 0)
rightPreTree := make([]int, 0)
for index, value := range inorder{
if value == root.Val{
leftInTree = inorder[0:index]
rightInTree = inorder[index + 1:]
leftPreTree = preorder[1: index + 1]
rightPreTree = preorder[index + 1:]
break
}
}
root.Left = buildTree(leftPreTree, leftInTree)
root.Right = buildTree(rightPreTree, rightInTree)
return root
}