给出一棵树的前序遍历和中序遍历,请构造这颗二叉树
注意:
可以假设树中不存在重复的节点
思路:前序遍历的第一个值是根节点,根据前序遍历的根节点分割中序遍历的左右两部分,然后遍历即可。
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param preorder int整型一维数组
* @param inorder int整型一维数组
* @return TreeNode类
*/
func buildTree( preorder []int , inorder []int ) *TreeNode {
// write code here
if len(preorder) == 0 {
return nil
}
val := preorder[0]
var k, v int
for k, v = range inorder {
if v == val {
break
}
}
inorder1 := inorder[:k]
inorder2 := inorder[k+1:]
node := new(TreeNode)
node.Val = val
preorder1 := preorder[1 : len(inorder1)+1]
node.Left = buildTree(preorder1, inorder1)
if k != len(inorder)-1 {
preorder2 := preorder[len(inorder1)+1:]
node.Right = buildTree(preorder2, inorder2)
}
return node
}