数组元素还原二叉树
package program
import "testing"
var arr = []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
func TestBuildTreeByArr(t *testing.T) {
root := &TreeNode{
Value: arr[1],
}
BuildTree(root, 1)
PrintTree(root)
}
func TestBuildTreeQueue(t *testing.T) {
queue := make([]*TreeNode, 0)
root := &TreeNode{
Value: arr[1],
}
queue = append(queue, root)
i := 2
for k := 0; k < len(queue); k++ {
node := queue[k]
if i < len(arr) {
node.Left = &TreeNode{
Value: arr[i],
}
queue = append(queue, node.Left)
i++
}
if i < len(arr) {
node.Right = &TreeNode{
Value: arr[i],
}
queue = append(queue, node.Right)
i++
}
}
PrintTree(root)
}
func BuildTree(node *TreeNode, i int) {
if 2*i < len(arr) {
node.Left = &TreeNode{
Value: arr[2*i],
}
BuildTree(node.Left, 2*i)
}
if 2*i+1 < len(arr) {
node.Right = &TreeNode{
Value: arr[2*i+1],
}
BuildTree(node.Right, 2*i+1)
}
}