go代碼實現二叉樹的層級輸出

我是一個go代碼小白菜,心裏有算法 落筆不知道怎麼寫,下面就是我對二叉樹的層級遍歷的 演變 實現過程,祝自己成長!!!

  • 一:一個滿二叉樹的層級輸出:

  • 1.輸出:一列一個形式

代碼如下:

package main

import "fmt"

type Node struct {
    Data *TreeNode
    Next *Node
}
type List struct {
   Head *Node
   Tail *Node
}
//樹結構體
type TreeNode struct {
   value interface{}
   Left  *TreeNode
   Right *TreeNode

}
//創建樹
func createTree(v interface{}) *TreeNode {
   return &TreeNode{v, nil, nil}
}
//創建空鏈表
func createList() *List{
    return &List{nil, nil}
}
func (list *List) push(Treenode *TreeNode) {
    node := &Node{Treenode, nil}
    if(list.Head == nil){
        list.Head = node
        list.Tail = node
    }else{
        if(list.Head == list.Tail){
            list.Head.Next = node
            list.Tail = node
        }else{
            list.Tail.Next = node
            list.Tail = node
        }
    }
}
func (list *List) pull() *TreeNode{
    tree := list.Head.Data
    list.Head = list.Head.Next
    return tree
}
func isNull(list *List)  bool{
    if(list.Head == nil){
        return true
    }else{
        return false
    }
}
func main() {
    tree := createTree(1)
    tree.Left  = createTree(2)
    tree.Right = createTree(3)
    tree.Left.Left  = createTree(4)
    tree.Left.Right = createTree(5)

    tree.Right.Left  = createTree(6)
    tree.Right.Right = createTree(7)
//二叉樹準備好  現在層級遍歷
    AList := createList()
    BList := createList()
    lsit :=  pollTree(tree, AList, BList)
    pullTree(lsit)
}
func pullTree(list *List){
    if(list.Head != nil){
        reet := list.pull()
        fmt.Println(reet.value)
        pullTree(list)
    }
}
func pollTree(tree *TreeNode, Alist *List, Blist *List) *List{
    if(tree.Left != nil){
        Blist.push(tree.Left)
    }
    if(tree.Right != nil){
        Blist.push(tree.Right)
    }
    Alist.push(tree)
    if(isNull(Blist) == false){
        pollTree(Blist.pull() , Alist, Blist)
    }
    return Alist
}
  • 2.層次輸出

一部分的代碼函數  pullTree 替換


func pullTree(list *List){
    num := 1;
    for {
        if(list.Head == nil){
            break
        }
        for i := 0; i< num; i++ {
             reet := list.pull()
             if i == num - 1 {
                fmt.Println(reet.value)
             }else{
                fmt.Print(reet.value," ")
             }
        }
        num = num*2
    }
}
  • 3.層次 最高層節點處於中間

這次上升難度了,需要提前知道深度 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章