数组元素还原二叉树

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)
    }
}

results matching ""

    No results matching ""