完全二叉树的定义: 一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。

一个直观的想法, 就是观察一棵完全二叉树,来分析它到底有什么特征。

方法1:

  • 按层遍历二叉树, 从每层从左向右遍历所有的结点
  • 如果当前结点有右孩子, 但没有左孩子, 那么直接返回false
  • 如果当前结点并不是左右孩子都有, 那么它之后的所有结点都必须为叶子结点, 否则返回false
  • 遍历结束后返回true
public class TreeNode
{public TreeNode(int v){Val = v;}public int Val { get; private set;}public TreeNode Left { get; set; }public TreeNode Right { get; set; }
}public bool IsCompleteBinaryTree(TreeNode root)
{if(root == null) return true;Queue<TreeNode> queue = new Queue<TreeNode>();queue.Enqueue(root);bool shouldBeLeaf = false;while(queue.Count > 0){var node = queue.Dequeue();if(shouldBeLeaf && (node.Left != null || node.Right != null)){return false;}if(node.Left == null && node.Right != null){return false;}if(node.Left != null){queue.Enqueue(node.Left);}if(node.Right != null){queue.Enqueue(node.Right);} else {shouldBeLeaf = true;}}return true;
}

  

转载于:https://www.cnblogs.com/johnson-lu/p/5164523.html

如何判断一棵二叉树是完全二叉树(1)相关推荐

  1. 如何判断一棵二叉树是完全二叉树

    严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树.这个概念很好理解, 就是一棵树,深度为k,并且没有空位. 首先对满二叉树按照广度优先遍历(从左到右)的顺序进行编号 ...

  2. 牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案

    牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案 题解: 搜索二叉树满足以下性质: 1.非空左子树的所以键值小于其根节点的键值 2.非空右子树的所有键值大于其根节点的键值 ...

  3. 判断一棵二叉树是否为完全二叉树-Java

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net package live.every.day.Pro ...

  4. python代码判断两棵二叉树是否相同

    python代码判断两棵二叉树是否相同 给定两个二叉树,编写一个函数来校验它们是否相同.如果两个树在结构上相同,并且结点具有相同的值,则认为它们是相同的. 判断两个二叉树是否是相同的,相同的依据是 二 ...

  5. 数据结构之判断一棵树是不是完全二叉树

    1 完全二叉树 完全二叉树是由 满二叉树 而引出来的.对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树. 如下就是完全二叉树 ...

  6. Python算法——判断两棵二叉树是否相等

    要求: 如何判断两颗树是否相等?(两棵树相等是指这两课树有着相同的结构,并且在相同位置上的结点有相同的值) 分析: 如果两颗二叉树root1, root2相等, 那么root1和root2结点的值相同 ...

  7. 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)

    平衡二叉树的解法:主要是求出二叉树的高度,若根节点的左子树的高度与右子树的高度差小于等于1,则表示该二叉树为平衡二叉树 public static class Node{public int valu ...

  8. 判断一棵二叉树是否为平衡二叉树

    1.先给出树节点信息 typedef struct tree{struct tree *lchild;struct tree *rchlid;int data; }tree,* Bitree; 2.原 ...

  9. 【面试】判断一棵二叉树是否为二叉排序树

    一.描述 给定一棵二叉树,如何判断一棵树是否是二叉排序树.给出树结点定义如下 class TreeNode {int key;TreeNode left;TreeNode right;public T ...

最新文章

  1. richTextBox1 转到行号
  2. JVM(Java虚拟机)优化大全和案例实战
  3. ubuntu 修改environment导致无法启动
  4. Android中读取NFC标签卡中的ID
  5. kali linux 清华源_Kali Linux系统更新安装国外源教程:
  6. USACO-Section1.5 Mother's Milk (深度优先搜索)
  7. setTimeout/setInterval伪异步
  8. java配置自动任务,定期执行代码
  9. 密码学和Java加密与解密技术
  10. zz 超级拖拉机 4.02 破解算法分析
  11. ubuntu添加桌面快捷方式图标
  12. 疯狂java  进行回顾
  13. 计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...
  14. 金属胁迫+转录组=高分好文
  15. java小白日记第五天
  16. Postgresql查询执行模块README笔记
  17. 移动终端软件测试基础知识,移动终端软件测试基础知识 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  18. Cocos Creator生成方形
  19. 2022年商标注册需要多长时间?
  20. 在阿里待了 365 天,毕业啦

热门文章

  1. 多柱汉诺塔最优算法设计探究
  2. 工业相机硬汉!这款相机被NASA选择,全程记录毅力号登陆火星
  3. 不得不服!腾讯优图联合腾讯会议正式上线神奇的眼神接触功能
  4. 自动化数据增强:实践、理论和新方向
  5. 精度、延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet
  6. Nature调查再聚焦读博压力:超1/3博士生焦虑抑郁,大学有没有能哭的地方?
  7. Kaggle新上比赛:Google AI发起地域包容性图像识别竞赛
  8. 【python教程入门】Python的机器学习库有哪些?
  9. ECCV 2020最佳论文讲了什么?作者为ImageNet一作、李飞飞高徒
  10. CVPR2020 | 跨模态行人重识别:共享与特异特征变换算法cm-SSFT