1、由标明空子树的先跟遍历序列建立一颗二叉树的操作算法
var i = -1
func HaveEmptyCreate(arr []int) *TreeNode{
i=i+1
if i >= len(arr){
return nil
}
var t TreeNode
if arr[i] != 0 {
t = TreeNode{nil,arr[i],nil}
t.Left = HaveEmptyCreate(arr)
t.Right = HaveEmptyCreate(arr)
}else {
return nil
}
return &t
}
2、由完全二叉树的顺序存储结构建立其二叉链式存储结构
func TreeCreate(i int,arr []int) *TreeNode{
t := &TreeNode{nil,arr[i],nil}
if i<len(arr) && 2*i+1 < len(arr){
t.Left = TreeCreate(2*i+1,arr)
}
if i<len(arr) && 2*i+2 < len(arr) {
t.Right = TreeCreate(2*i+2,arr)
}
return t
}
3、由先根遍历序列和中根遍历序列建立一颗二叉树
func PreMidCreate(pa []int,ma []int,preI int,midI int,len int) *TreeNode {
if len > 0{
p := pa[preI]
i := 0
for ;i<len;i++ {
if p == ma[midI+i] {
break
}
}
t := TreeNode{nil,p,nil}
t.Left = PreMidCreate(pa,ma,preI+1,midI,i)
t.Right = PreMidCreate(pa,ma,preI+i+1,midI+i+1,len-1-i)
return &t
}
return nil
}