如何判断一棵二叉树是完全二叉树(1)
完全二叉树的定义: 一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。
一个直观的想法, 就是观察一棵完全二叉树,来分析它到底有什么特征。
方法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)相关推荐
- 如何判断一棵二叉树是完全二叉树
严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树.这个概念很好理解, 就是一棵树,深度为k,并且没有空位. 首先对满二叉树按照广度优先遍历(从左到右)的顺序进行编号 ...
- 牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案
牛客题霸 [ 判断一棵二叉树是否为搜索二叉树和完全二叉树] C++题解/答案 题解: 搜索二叉树满足以下性质: 1.非空左子树的所以键值小于其根节点的键值 2.非空右子树的所有键值大于其根节点的键值 ...
- 判断一棵二叉树是否为完全二叉树-Java
分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net package live.every.day.Pro ...
- python代码判断两棵二叉树是否相同
python代码判断两棵二叉树是否相同 给定两个二叉树,编写一个函数来校验它们是否相同.如果两个树在结构上相同,并且结点具有相同的值,则认为它们是相同的. 判断两个二叉树是否是相同的,相同的依据是 二 ...
- 数据结构之判断一棵树是不是完全二叉树
1 完全二叉树 完全二叉树是由 满二叉树 而引出来的.对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树. 如下就是完全二叉树 ...
- Python算法——判断两棵二叉树是否相等
要求: 如何判断两颗树是否相等?(两棵树相等是指这两课树有着相同的结构,并且在相同位置上的结点有相同的值) 分析: 如果两颗二叉树root1, root2相等, 那么root1和root2结点的值相同 ...
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
平衡二叉树的解法:主要是求出二叉树的高度,若根节点的左子树的高度与右子树的高度差小于等于1,则表示该二叉树为平衡二叉树 public static class Node{public int valu ...
- 判断一棵二叉树是否为平衡二叉树
1.先给出树节点信息 typedef struct tree{struct tree *lchild;struct tree *rchlid;int data; }tree,* Bitree; 2.原 ...
- 【面试】判断一棵二叉树是否为二叉排序树
一.描述 给定一棵二叉树,如何判断一棵树是否是二叉排序树.给出树结点定义如下 class TreeNode {int key;TreeNode left;TreeNode right;public T ...
最新文章
- richTextBox1 转到行号
- JVM(Java虚拟机)优化大全和案例实战
- ubuntu 修改environment导致无法启动
- Android中读取NFC标签卡中的ID
- kali linux 清华源_Kali Linux系统更新安装国外源教程:
- USACO-Section1.5 Mother's Milk (深度优先搜索)
- setTimeout/setInterval伪异步
- java配置自动任务,定期执行代码
- 密码学和Java加密与解密技术
- zz 超级拖拉机 4.02 破解算法分析
- ubuntu添加桌面快捷方式图标
- 疯狂java 进行回顾
- 计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...
- 金属胁迫+转录组=高分好文
- java小白日记第五天
- Postgresql查询执行模块README笔记
- 移动终端软件测试基础知识,移动终端软件测试基础知识 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- Cocos Creator生成方形
- 2022年商标注册需要多长时间?
- 在阿里待了 365 天,毕业啦
热门文章
- 多柱汉诺塔最优算法设计探究
- 工业相机硬汉!这款相机被NASA选择,全程记录毅力号登陆火星
- 不得不服!腾讯优图联合腾讯会议正式上线神奇的眼神接触功能
- 自动化数据增强:实践、理论和新方向
- 精度、延迟两不误,移动端性能新SOTA,谷歌TF开源轻量级EfficientNet
- Nature调查再聚焦读博压力:超1/3博士生焦虑抑郁,大学有没有能哭的地方?
- Kaggle新上比赛:Google AI发起地域包容性图像识别竞赛
- 【python教程入门】Python的机器学习库有哪些?
- ECCV 2020最佳论文讲了什么?作者为ImageNet一作、李飞飞高徒
- CVPR2020 | 跨模态行人重识别:共享与特异特征变换算法cm-SSFT