<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
先看如下這一張圖:
這個一顆二元樹,如何區分該樹是不是完全二元樹呢?
而上面第一張圖這顆二元樹很明顯是一顆非完全二元樹,因為在第三層也就是在節點2它並沒有右子節點。在6和4節點中隔開了一個節點(2節點沒有右子節點),所以不是完全二元樹
再看第二張圖,這顆樹就是一個完全二元樹,雖然在這個顆節點3沒有右子節點,但是6 4 5節點之間並沒有空缺的子節點,這裡就解釋了上面說的第三條(如何沒有子節點,那也是在左側開始到右側依次沒有子節點才視為完全二元樹)
這道題可以使用按層遍歷的方式來解決:
type TreeNode struct { val string left *TreeNode right *TreeNode }
func main() { root := &TreeNode{val: "1"} root.left = &TreeNode{val: "2"} root.left.left = &TreeNode{val: "4"} root.left.right = &TreeNode{val: "10"} root.left.left.left = &TreeNode{val: "7"} root.right = &TreeNode{val: "3"} root.right.left = &TreeNode{val: "5"} root.right.right = &TreeNode{val: "6"} if IsCompleteBt(root) { fmt.Println("是完全二元樹") } else { fmt.Println("不是完全二元樹") } }
// IsCompleteBt 這裡預設根節點為空屬於完全二元樹,這個可以自已定義是否為完全二元樹/***/ func IsCompleteBt(root *TreeNode) bool { if root == nil { return true } /** * 條件: * 1.當一個節點存在右子節點但是不存在左子節點這顆樹視為非完全二元樹 * 2.當一個節點的左子節點存在但是右子節點不存在視為完全二元樹 */ var tempNodeQueue []*TreeNode tempNodeQueue = append(tempNodeQueue, root) var tempNode *TreeNode isSingleNode := false for len(tempNodeQueue) != 0 { tempNode = tempNodeQueue[0] tempNodeQueue = tempNodeQueue[1:] if (isSingleNode && (tempNode.left != nil || tempNode.right != nil)) || (tempNode.left == nil && tempNode.right != nil){ return false } if tempNode.left != nil{ tempNodeQueue = append(tempNodeQueue,tempNode.left) }else{ isSingleNode = true } if tempNode.right != nil { tempNodeQueue = append(tempNodeQueue, tempNode.right) }else{ isSingleNode = true } } return true }
這段程式碼裡面沒有多少好說的,就說下for裡面第一個if
判斷叭
這裡看下上面流程中最後兩個條件,當滿足最後兩個條件的時候才可以判斷出來這顆樹是否是完全二元樹.
同樣因為實現判斷是否是完全二元樹是通過對樹的按層遍歷來處理的,因為對樹的按層遍歷通過佇列是可以間單的實現的。所以這裡使用到了佇列
至於這裡為什麼要單獨建立一個isSingleNode變數:
在這顆樹的最後一層綠色塗鴨處是少一個節點的,所以我用了一個變數我標識當前節點(在上圖表示節點2)的子節點是不是少一個,如果少了當前節點(在上圖表示節點2)的下一個節點(在上圖表示節點3)的子節點(在上圖表示4和5)如果存在則不是完全二元樹,所以這就是建立了一個isSingleNode
變數的作用
到此這篇關於利用go語言判斷是否是完全二元樹的文章就介紹到這了,更多相關go 二元樹內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45