2021-04-14:判斷二叉樹是不是滿二叉樹?java
福大大 答案2021-04-14:node
網上查到的答案,通常會計算樹的高度。個人答案不須要計算樹的高度,至因而否準確,不得而知。
1.左子節點滿。
2.右子節點滿。
3.左右子節點的數量相等。
採用遞歸便可。git
代碼用golang編寫。代碼以下:github
package main import "fmt" func main() { head := &TreeNode{ Val: 5} head.Left = &TreeNode{ Val: 3} head.Right = &TreeNode{ Val: 7} head.Left.Left = &TreeNode{ Val: 2} head.Left.Right = &TreeNode{ Val: 4} head.Right.Left = &TreeNode{ Val: 6} head.Right.Right = &TreeNode{ Val: 8} ret := IsFBT(head) fmt.Println("是不是滿二叉樹:", ret) } //Definition for a binary tree node. type TreeNode struct { Val int Left *TreeNode Right *TreeNode } type Info struct { IsFull bool Cnt int } func IsFBT(head *TreeNode) bool { return process(head).IsFull } func process(head *TreeNode) *Info { if head == nil { return &Info{ IsFull: true} } leftInfo := process(head.Left) //左不滿 if !leftInfo.IsFull { return leftInfo } rightInfo := process(head.Right) //右不滿 if !rightInfo.IsFull { return rightInfo } //左右不等 if leftInfo.Cnt != rightInfo.Cnt { return new(Info) } //經過全部考驗 return &Info{ IsFull: true, Cnt: leftInfo.Cnt + rightInfo.Cnt + 1} }
執行結果以下:
golang