2021-04-11:判断二叉树是否是完全二叉树?
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 intLeft *TreeNodeRight *TreeNode}func isCBT1(head *TreeNode) bool {if head == nil {return true}queue := list.New()// 是否遇到过左右两个孩子不双全的节点leaf := falsevar l *TreeNodevar r *TreeNodequeue.PushBack(head)for !(queue.Len() == 0) {head = queue.Remove(queue.Front()).(*TreeNode)l = head.Leftr = head.Rightif// 如果遇到了不双全的节点之后,又发现当前节点不是叶节点(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}
执行结果如下:
***
[左神java代码](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class12/Code01_IsCBT.java)
[评论](https://user.qzone.qq.com/3182319461/blog/1618097666)
