您現在的位置是:首頁 > 動作武俠首頁動作武俠

2021-04-11:判斷二叉樹是否是完全二叉樹?

  • 由 福大大架構師每日一題 發表于 動作武俠
  • 2021-07-14
簡介type TreeNode struct {Val intLeft*TreeNodeRight *TreeNode}func isCBT1(head *TreeNode) bool {if head

幾乎完全二叉樹

2021-04-11:判斷二叉樹是否是完全二叉樹?

福大大 答案2021-04-11:

按層遍歷。

程式碼用golang編寫。程式碼如下:

package mainimport ( “container/list” “fmt”)func main() { head := &TreeNode{Val: 1} head。Left = &TreeNode{Val: 2} head。Right = &TreeNode{Val: 3} head。Left。Left = &TreeNode{Val: 4} //head。Right。Right = &TreeNode{Val: 5} ret := isCBT1(head) fmt。Println(ret)}//Definition for a binary tree node。type TreeNode struct { Val int Left *TreeNode Right *TreeNode}func isCBT1(head *TreeNode) bool { if head == nil { return true } queue := list。New() // 是否遇到過左右兩個孩子不雙全的節點 leaf := false var l *TreeNode var r *TreeNode queue。PushBack(head) for !(queue。Len() == 0) { head = queue。Remove(queue。Front())。(*TreeNode) l = head。Left r = head。Right if // 如果遇到了不雙全的節點之後,又發現當前節點不是葉節點 (leaf && (l != nil || r != nil)) || (l == nil && r != nil) { return false } if l != nil { queue。PushBack(l) } if r != nil { queue。PushBack(r) } if l == nil || r == nil { leaf = true } } return true}

執行結果如下:

2021-04-11:判斷二叉樹是否是完全二叉樹?

***

[左神java程式碼](https://github。com/algorithmzuo/algorithmbasic2020/blob/master/src/class12/Code01_IsCBT。java)

[評論](https://user。qzone。qq。com/3182319461/blog/1618097666)

Top