范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Go语言实现二叉树

  1、定义结点 package main  import (     "fmt" )  // 定义结点 type BinaryTreeNode struct {     Data  int     Left  *BinaryTreeNode     Right *BinaryTreeNode }
  2、创建结点 // 创建结点 func CreateBinaryTree(data int) *BinaryTreeNode {     return &BinaryTreeNode{data, nil, nil} }
  3、数据插入 // 插入结点 func (node *BinaryTreeNode) Insert(n *BinaryTreeNode, data int) bool {     cur := n     for cur != nil {         if cur.Data < data {             if cur.Right != nil {                 cur = cur.Right             } else {                 cur.Right = CreateBinaryTree(data)                 return true             }         } else {             if cur.Left != nil {                 cur = cur.Left             } else {                 cur.Left = CreateBinaryTree(data)                 fmt.Println(data, "d---")                 return true             }         }     }     return false }
  4、层序遍历 // 层数打印 func (node *BinaryTreeNode) BreadthFirstSearch() []int {     if node == nil {         return nil     }     var result []int     par := node     cur := []*BinaryTreeNode{par}     for len(cur) > 0 {         result = append(result, cur[0].Data)         if cur[0].Left != nil {             cur = append(cur, cur[0].Left)         }         if cur[0].Right != nil {             cur = append(cur, cur[0].Right)         }         cur = cur[1:]     }     return result }
  5、前序遍历 // 前序打印 func (node *BinaryTreeNode) PreOrder(n *BinaryTreeNode) {     if n != nil {         fmt.Println(n.Data)         node.PreOrder(n.Left)         node.PreOrder(n.Right)     } }
  6、中序遍历 // 中序打印 func (node *BinaryTreeNode) InOrder(n *BinaryTreeNode) {     if n != nil {         node.InOrder(n.Left)         fmt.Println(n.Data)         node.InOrder(n.Right)     } }
  7、后序遍历 // 后序打印 func (node *BinaryTreeNode) PostOrder(n *BinaryTreeNode) {     if n != nil {         node.InOrder(n.Left)         node.InOrder(n.Right)         fmt.Println(n.Data)     } }
  8、获取树的高度 // 获取树的高度 func (node *BinaryTreeNode) GetHight(n *BinaryTreeNode) int {     if n == nil {         return 0     }     l := node.GetHight(n.Left)     r := node.GetHight(n.Right)     if l > r {         return l + 1     } else {         return r + 1     } }
  9、打印叶子结点 // 打印叶子节点 func (node *BinaryTreeNode) FindLead(n *BinaryTreeNode) {     if n != nil {         if n.Left == nil && n.Right == nil {             fmt.Println(n.Data)         }         node.FindLead(n.Left)         node.FindLead(n.Right)     } }
  10、查找指定值的节点 // 查找指定值的节点 func (node *BinaryTreeNode) FindValueNode(n *BinaryTreeNode, target int) *BinaryTreeNode {     if n == nil {         return nil     } else if n.Data == target {         return n     } else {         cur := node.FindValueNode(n.Left, target)         if cur != nil {             return cur         }         return node.FindValueNode(n.Right, target)     } }
  11、主函数 func main() {     var node *BinaryTreeNode // 创建一个根结点     node = CreateBinaryTree(10)     li := []int{9, 11, 8, 5, 6, 4, 12, 15, 18, 17} // 准备数据     // 插入数据     for _, val := range li {         node.Insert(node, val)     }     ret := node.BreadthFirstSearch()     fmt.Println(ret)     node.PreOrder(node)     node.InOrder(node)     node.PostOrder(node)     res := node.GetHight(node)     fmt.Println(res)     node.FindLead(node)     ref := node.FindValueNode(node, 17)     fmt.Println(ref) }
  12、运行结果 9 d--- 8 d--- 5 d--- 4 d--- 17 d--- [10 9 11 8 12 5 15 4 6 18 17] 10 9 8 5 4 6 11 12 15 18 17 4 5 6 8 9 10 11 12 15 17 18 4 5 6 8 9 11 12 15 17 18 10 6 4 6 17 &{17  }
  该实例生成的二叉树如下:

一些短而有意境的句子我走过的漫长的道路并不总是铺着玫瑰花的,有时也荆棘丛生。季羡林与怪物战斗的人应当小心自己不要成为怪物,当你远远凝视深渊时,深渊也在凝视你。尼采善恶的彼岸自身拥有越丰富,他在别人身上满足是快乐,不满是期待有一个传说,说的是有那么一只鸟儿,它一生只唱一次,那歌声比世上所有一切生灵的歌声都更加优美动听。从离开巢窝的那一刻起,它就在寻找着荆棘树,直到如愿以偿,才歇息下来。然后,它把自己的你该如何屹立于天地之间?你这辈子做得最有种的事情是什么?是从别人羡慕的岗位离职出来自己创业?还是自己想当老板的野心?其实都不是,从一开始,我并没有那么大的野心,我只是想做个好职员,最多想成为一名优秀的工作人的行为是最好的风水师谣零零计划老甄絮语退后一步,行安乐法,道三个好,结欢喜缘。人生快乐不快乐看心情,心情好不好看心态,心态平不平看行为。人的行为就是最好的风水,我们都应该择善而行。海阔天空,任凭风吹麦随笔开悟开悟什么意思?就是开窍,以前不懂的,突然就理解了。我理解的开悟,有两个层面。一个是链接,一个是实事求是。开悟说得简单,就是突然明白了。但实际上是非常困难的,需要阅历经历经验等积累。昆明小故宫你还不知道?带你梦回前朝说起文庙,相信没有昆明人会不认识它,但人们总是只在门口停留,或是步履匆匆路过千百次,却从未涉足。今天一定要带大家好好逛逛文庙,感受那一砖一瓦间的昆明历史。文庙建于1276年,在我国上个世纪八十年代最具有代表作的十二篇湖南旅游文学作品上个世纪八十年代最具有代表作的十二篇湖南旅游文学作品1悠悠的猛洞河作者银云(散文)影响力五星2沅陵,那遥远的山城作者刘学稼(散文)影响力五星3指点巴陵胜景作者郑降肖(报告文学)影响中国版66号公路,赞在河北张家口,有着一条有中国版66号公路之称的草原天路。下面就让我们一起体验,骑骏马,打铁花,放声高歌,大快朵颐的游牧生活吧!天苍苍,野茫茫,风吹草低见牛羊。这一次的行程将尚义张北既好奇又想沾沾喜气!2名女子旅游遇婚宴随礼200元吃席姐妹俩去广西柳州旅游,在路边散步不知道吃什么,偶然看到一酒店新人在办婚宴,正好身上有红包,在门口犹豫了很久,最后还是鼓起勇气随礼200元参加婚宴,吃了席。这个可以有,受到启发了,超大快人心!意媒目中无人看衰中国女排,国际排联用8个字快速反击2022年女排世锦赛四分之一决赛即将于今晚打响,根据今年世锦赛的最新赛制,四强名额争夺赛将采取一场定胜负。赢下比赛就能拿到四强名额继续冲击奖牌而失利者则只能一失足成千古恨灰溜溜的黯黄圣依真有贵妇感,穿低胸薄纱连衣裙,魔鬼身材太令人心动黄圣依是自从出道以来就以她出众的颜值惊艳了很多人,虽然现如今的她已经结婚多年,而且越来越低调,但出现在大众视线中仍然维持着较好的面貌,这一次黄圣依穿上一条低胸的薄纱连衣裙,看上去真
EStar41拿下GK,大魔王打破魔咒,四强名额收入囊中前言KPL季后赛首战AG超玩会银河战舰陨落,RW侠尽显风范,队伍向前一步之后第二场比赛DYG对战MTG,以狂鲨之势挫败了下山猛虎,观众也是唏嘘不断。现在胜者组的比赛到来,EStar日本沉没要成真?7小时4次地震,是富士山喷发大地震的前兆吗?日本沉没吗?富士山会喷吗?日本的作家小松左京曾经写过一本书日本沉没,后来这本书本多次被改成影视剧,其中2006年上映的同名电影日本沉没让人印象深刻。在电影当中,由于地壳变化,各地火67岁林青霞罕见露面!参加聚会美成焦点,穿衬衫颜值不老太女神已经67岁的林青霞,虽然早就到了花甲的年纪,但是因为自己出色的保养,让整个人看上去比起真实年纪可是要年轻不少,身材线条的纤细感,也让林青霞每一次的露面都更加的惊艳。12月3号,林青消费者犯愁明年多款旗舰机将放弃高通骁龙8Gen1采用天玑9000截止目前为止,明年的高端旗舰机将要搭载的两款次世代处理器都已发布,分别是高通的骁龙8Gen1和联发科的天玑9000。但和往年不同的是,这两款旗舰芯片的风评正在发生变化,往年高通的旗赵家班杨树林,当红时妻子锒铛入狱,他回家带女儿痴心等待都说,娱乐圈没有真情在。单论2021年离婚的明星夫妻,就够大家吃上一缸的瓜了。这不,王岳伦李湘夫妇也趁势抓住了今年的尾巴,贡献了一波2021年的离婚KPI。不同于其它和平离婚的夫妻爸爸去哪1播出八年,除了王岳伦,其他爸爸的婚姻都令人羡慕文丨青编辑丨娱阿姨王岳伦就这样破罐子破摔了?三天会两女离婚,祝福前妻与意中人白头到老。自从综艺爸爸去哪儿第一部火了后,王岳伦的操作越来越离谱。可火的不只有他,还有其他的五个爸爸呢!新能源出租车被迫装柴暖,科技让出行倒退?图片来源pexels钛媒体注本文来自于微信公众号新浪科技(IDtechsina),作者花子健,编辑韩大鹏,钛媒体经授权发布。划重点1寒潮天气影响下,新能源车主再现里程焦虑。特别是在1993年,苏联挖到了地下12263米,发现了什么导致项目突然停止?文老铁说史编辑老铁说史1970年震惊世界的挖穿地球计划为何突然停止?苏联人在地底发现了什么不为人知的秘密?事件起因这件事情的起因还要从美苏冷战讲起。随着二战的结束,纳粹德国作为战败宁夏1968年的12张照片1。1968年2月28日,宁夏回族自治区银川市第一中学入伍的部分新兵换上军装后在自治区体育馆前合影留念。2。1968年,宁夏回族自治区地方粮票壹市两。3。1968年,宁夏总指挥部有他7岁参军9岁长征,母亲是烈士舅舅是元帅,如今享受副军级待遇1934年10月,第5次反围剿失败之后,主力红军开始实行战略性转移,从这个时候长征由此开始,这也是人类历史上的第1次伟大奇迹,因为当时的红军在长征的时候,经历了各种磨难,期间的困难阿布拉莫维奇时代切尔西最糟糕的10大引援自2003年罗曼阿布拉莫维奇接手以来,切尔西不仅在英格兰,而且在欧洲赛场都成为了强者,夺得了五次英超联赛冠军和两次欧洲冠军联赛冠军欧联杯冠军以及其他英格兰杯赛冠军。阿布拉莫维奇的激