亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang二叉樹前序,中序,后序非遞歸遍歷算法

發布時間:2020-04-10 22:03:45 來源:網絡 閱讀:5409 作者:暮色伊人 欄目:編程語言
package main

import (
   "container/list"
   "fmt"
)

// Binary Tree
type BinaryTree struct {
   Data  interface{}
   Left  *BinaryTree
   Right *BinaryTree
}

// Constructor
func NewBinaryTree(data interface{}) *BinaryTree {
   return &BinaryTree{Data: data}
}

// 先序遍歷-非遞歸
func (bt *BinaryTree) PreOrderNoRecursion() []interface{} {
   t := bt
   stack := list.New()
   res := make([]interface{}, 0)
   for t != nil || stack.Len() != 0 {
      for t != nil {
         res = append(res, t.Data)//visit
         stack.PushBack(t)
         t = t.Left
      }
      if stack.Len() != 0 {
         v := stack.Back()
         t = v.Value.(*BinaryTree)
         t = t.Right
         stack.Remove(v)
      }
   }
   return res
}

// 中序遍歷-非遞歸
func (bt *BinaryTree) InOrderNoRecursion() []interface{} {
   t := bt
   stack := list.New()
   res := make([]interface{}, 0)
   for t != nil || stack.Len() != 0 {
      for t != nil {
         stack.PushBack(t)
         t = t.Left
      }
      if stack.Len() != 0 {
         v := stack.Back()
         t = v.Value.(*BinaryTree)
         res = append(res, t.Data)//visit
         t = t.Right
         stack.Remove(v)
      }
   }
   return res
}

// 后序遍歷-非遞歸
func (bt *BinaryTree) PostOrderNoRecursion() []interface{} {
   t := bt
   stack := list.New()
   res := make([]interface{}, 0)
   var preVisited *BinaryTree

   for t != nil || stack.Len() != 0 {
      for t != nil {
         stack.PushBack(t)
         t = t.Left
      }

      v   := stack.Back()
      top := v.Value.(*BinaryTree)

      if (top.Left == nil && top.Right == nil) || (top.Right == nil && preVisited == top.Left) || preVisited == top.Right{
         res = append(res, top.Data)//visit
         preVisited = top
         stack.Remove(v)
      }else {
         t = top.Right
      }
   }
   return res
}



func main() {
   t := NewBinaryTree(1)
   t.Left  = NewBinaryTree(3)
   t.Right = NewBinaryTree(6)
   t.Left.Left = NewBinaryTree(4)
   t.Left.Right = NewBinaryTree(5)
   t.Left.Left.Left = NewBinaryTree(7)

   fmt.Println(t.PreOrderNoRecursion())
   fmt.Println(t.InOrderNoRecursion())
   fmt.Println(t.PostOrderNoRecursion())
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝县| 武功县| 高雄市| 永新县| 叙永县| 饶平县| 清流县| 北票市| 汉源县| 抚顺市| 扶风县| 始兴县| 镇宁| 桐梓县| 清丰县| 农安县| 临高县| 若尔盖县| 哈尔滨市| 自贡市| 安多县| 台中市| 仪征市| 德化县| 沁阳市| 河池市| 高州市| 淮安市| 河曲县| 昭苏县| 克山县| 大荔县| 澄城县| 马鞍山市| 西乌珠穆沁旗| 桐庐县| 古浪县| 涪陵区| 孙吴县| 马关县| 依兰县|