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