怎样推断一棵二叉树是全然二叉树
严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树。这个概念非常好理解,
就是一棵树,深度为k,而且没有空位。
首先对满二叉树依照广度优先遍历(从左到右)的顺序进行编号。
一颗深度为k二叉树,有n个节点,然后,也对这棵树进行编号,假设全部的编号都和满二叉树相应,那么这棵树是全然二叉树。
随意的一个二叉树,都能够补成一个满二叉树。这样中间就会有非常多空洞。在广度优先遍历的时候,假设是满二叉树,或者全然二叉树,这些空洞是在广度优先的遍历的末尾,所以,但我们遍历到空洞的时候,整个二叉树就已经遍历完毕了。而假设,是非全然二叉树,
我们遍历到空洞的时候,就会发现,空洞后面还有没有遍历到的值。这样,仅仅要依据是否遍历到空洞,整个树的遍历是否结束来推断是否是全然的二叉树。
算法例如以下:
bool is_complete(tree *root) { queue q; tree *ptr; // 进行广度优先遍历(层次遍历),并把NULL节点也放入队列 q.push(root); while ((ptr = q.pop()) != NULL) { q.push(ptr->left); q.push(ptr->right); } // 推断是否还有未被訪问到的节点 while (!q.is_empty()) { ptr = q.pop(); // 有未訪问到的的非NULL节点,则树存在空洞,为非全然二叉树 if (NULL != ptr) { return false; } } return true; }
怎样推断一棵二叉树是全然二叉树相关推荐
- 如何将一棵树转换成二叉树
题目: 如何将一棵树转换成二叉树? 解答: 1. 将 节点的孩子 放在左子树: 2. 将 节点的兄弟 放在右子树. 延伸: 任何一棵树都可以表示成二叉树,并不是任何一棵二叉树都可以表示成树.那么树多还 ...
- 牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1。牛牛想要删掉该树其中的k层节点,删除序列为a1,a2...ak。 如有一棵二叉树,删除其中的第3层节点
题目:牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1.牛牛想要删掉该树其中的k层节点,删除序列为a1,a2-ak. 如有一棵二叉树,删除其中的第3层节点 思路: 层序遍历,遍历时对节点依次进行 ...
- 数据结构之判断一棵树是不是满二叉树
1 满二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树.一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树.也就是说,如果一个二叉树的层数为K,且结点总数 ...
- 树-二叉树、满二叉树和完全二叉树
树-二叉树.满二叉树和完全二叉树 二叉树的定义: (1)当n=0时,为空树: (2)当n>0时,是由一个根结点和称为根结点的左.右子树构成,并且两颗子树互不相交. 满二叉树: 对于一棵二叉树,如 ...
- 二叉树题目----4 前序遍历重构二叉树 AND 求二叉树中所有结点的个数
前序遍历重构二叉树 思路 整个二叉树用数组存储 因为先序遍历它先遍历根,再遍历左,左边没有跑完是不会去遍历右边的,所以遍历左子树,就是数组元素每回向后一个,个数-1 遍历右边时,就是数组起始位置+左子 ...
- 再谈二叉树(二叉树概念,二叉树的性质,二叉树的存储结构)
树的概念 树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合.把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点 ...
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
[问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- python二叉树去重_python二叉树学习分享
介绍:树形结构是应用相当广泛的一种非线性结构,建立与应用大多使用链表来处理,当然也可用连续的列表来实现 常见概念: 满二叉树:如果树高位H,树的结点总数为2*H-1,H>=0,称为满二叉树 完全 ...
- php之二叉树,数据结构之二叉树——链式存储结构(php代码实现)
/** * ClearBiTree() 清空二叉树 * CreateBiTree() 创建二叉树 * BiTreeEmpty() 判断二叉树是否为空 * BiTreeDepth() 返回二叉树的深度 ...
最新文章
- 二维码Data Matrix的解码实现(zxing-cpp)
- 微信公众平台操作获取token类
- DFS(入门题,走迷宫)
- 对 MVC,MVT 解读的理解
- 怎么用java跟数据库建立关系,java – 关系和构建数据库
- MatConvNet深度学习工具箱安装教程
- php eval 安全性,php – 使用eval解析表单输入的方程式的最安全的方法
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
- fedora html 编辑器,分享|在 Fedora 上使用 Pitivi 编辑视频
- mysql连接操作_MySQL内连接操作
- react-spa小demo
- linux运行bak,linux 备份学习
- kali利用fluxion无线网络钓鱼
- C++析构函数定义和使用
- 软件工程第一次作业:写一篇自己的博客
- TSN报文优先级(802.1P优先级、IP优先级、TOS优先级)
- Lua: 好的, 坏的, 和坑爹的
- 汽车变速器(自动挡)英文缩写
- 5-11 猿课 笔记
- Python 时间序列建模:用指数平滑法预测股价走势
热门文章
- java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法
- php 树形结构实例,如果用php写树形结构?
- 微信小程序开发之scroll-view上拉加载数据实现
- python 网络爬虫 选择日期提交得到数据
- sqlserver 删除字段_SQL Server 执行计划缓存
- git maven 一键部署_Jenkins实现一键部署maven项目
- RCNN SPP_net
- Java 面试知识点解析(二)——高并发编程篇
- Vue.js 组件 处理边界情况
- 深入理解多线程(二)—— Java的对象模型