golang Tree创建二叉树

//golang先序遍历创建二叉树

package main

import (
	"container/list"
	"fmt"
)

type tree struct {
	left  *tree
	right *tree
	data  int
}

func create(index int, value []int) (T *tree) {
	T = &tree{}
	T.data = value[index-1]
	fmt.Printf("index %v \n", index)
	if index < len(value)-1 && 2*index <= len(value) && 2*index+1 <= len(value) {
		T.left = create(2*index, value)
		T.right = create(2*index+1, value)
	}
	return T

}

func show(treeNode *tree) {
	if treeNode != nil {
		fmt.Printf("%v ", treeNode.data)
		if treeNode.left != nil {
			show(treeNode.left)
		}
		if treeNode.right != nil {
			show(treeNode.right)
		}
	} else {
		return
	}
}

//顺序输出
func show1(treeNode *tree) {
	l := list.New()
	l.PushBack(treeNode)

	for treeNode != nil {
		if l.Front() != nil {
			fmt.Printf("%v ", l.Front().Value.(*tree).data)
			treeNode = l.Front().Value.(*tree)
		} else {
			break
		}

		if treeNode.left != nil {
			l.PushBack(treeNode.left)
		}
		if treeNode.right != nil {
			l.PushBack(treeNode.right)
		}
		if l.Front() != nil {
			l.Remove(l.Front())
		}
	}
}
func main() {
	value := []int{1, 2, 3, 4, 5, 6, 7}
	TreeRoot := create(1, value)
	show(TreeRoot) //先序
	fmt.Printf("\n")
	show1(TreeRoot) //顺序
}

输出结果:

1 2 4 5 3 6 7 //先序遍历

1 2 3 4 5 6 7 //顺序遍历


你可能感兴趣的:(golang Tree创建二叉树)