//golang先序遍历创建二叉树
packagemain import( "container/list" "fmt" ) typetreestruct{ left*tree right*tree dataint } funccreate(indexint,value[]int)(T*tree){ T=&tree{} T.data=value[index-1] fmt.Printf("index%v\n",index) ifindex<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) } returnT } funcshow(treeNode*tree){ iftreeNode!=nil{ fmt.Printf("%v",treeNode.data) iftreeNode.left!=nil{ show(treeNode.left) } iftreeNode.right!=nil{ show(treeNode.right) } }else{ return } } //依靠队列顺序输出 funcshow1(treeNode*tree){ l:=list.New() l.PushBack(treeNode) fortreeNode!=nil{ ifl.Front()!=nil{ fmt.Printf("%v",l.Front().Value.(*tree).data) treeNode=l.Front().Value.(*tree) }else{ break } iftreeNode.left!=nil{ l.PushBack(treeNode.left) } iftreeNode.right!=nil{ l.PushBack(treeNode.right) } ifl.Front()!=nil{ l.Remove(l.Front()) } } } funcmain(){ 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 //顺序遍历