由先序遍历序列和中序遍历序列,建立二叉树的二叉链表(二叉树各节点值各不相同)
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 || len(inorder) == 0 {
return nil
}
node := &TreeNode{Val: preorder[0]}
var pos int
for pos = 0; inorder[pos] != node.Val; pos++ {}
node.Left = buildTree(preorder[1:pos+1], inorder[:pos])
node.Right = buildTree(preorder[pos+1:], inorder[pos+1:])
return node
}
func PreInCreate(pre, infix []int) (tree *biTree) {
tree = &biTree{data: pre[1]}
var i int
for i = 1; infix[i] != tree.data; i++ {
}
llen := i - 1
rlen := len(infix) - i - 1
if llen == 0 {
tree.lchild = nil
} else {
tree.lchild = PreInCreate(pre[1:2+llen], infix[0:i])
}
if rlen == 0 {
tree.rchild = nil
} else {
tree.rchild = PreInCreate(pre[len(pre)-rlen-1:], infix[i:])
}
return
}