严蔚敏那本教材上的说法:一个深度为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. 如何将一棵树转换成二叉树

    题目: 如何将一棵树转换成二叉树? 解答: 1. 将 节点的孩子 放在左子树: 2. 将 节点的兄弟 放在右子树. 延伸: 任何一棵树都可以表示成二叉树,并不是任何一棵二叉树都可以表示成树.那么树多还 ...

  2. 牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1。牛牛想要删掉该树其中的k层节点,删除序列为a1,a2...ak。 如有一棵二叉树,删除其中的第3层节点

    题目:牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1.牛牛想要删掉该树其中的k层节点,删除序列为a1,a2-ak. 如有一棵二叉树,删除其中的第3层节点 思路: 层序遍历,遍历时对节点依次进行 ...

  3. 数据结构之判断一棵树是不是满二叉树

    1 满二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树.一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树.也就是说,如果一个二叉树的层数为K,且结点总数 ...

  4. 树-二叉树、满二叉树和完全二叉树

    树-二叉树.满二叉树和完全二叉树 二叉树的定义: (1)当n=0时,为空树: (2)当n>0时,是由一个根结点和称为根结点的左.右子树构成,并且两颗子树互不相交. 满二叉树: 对于一棵二叉树,如 ...

  5. 二叉树题目----4 前序遍历重构二叉树 AND 求二叉树中所有结点的个数

    前序遍历重构二叉树 思路 整个二叉树用数组存储 因为先序遍历它先遍历根,再遍历左,左边没有跑完是不会去遍历右边的,所以遍历左子树,就是数组元素每回向后一个,个数-1 遍历右边时,就是数组起始位置+左子 ...

  6. 再谈二叉树(二叉树概念,二叉树的性质,二叉树的存储结构)

    树的概念 树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合.把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点 ...

  7. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  8. python二叉树去重_python二叉树学习分享

    介绍:树形结构是应用相当广泛的一种非线性结构,建立与应用大多使用链表来处理,当然也可用连续的列表来实现 常见概念: 满二叉树:如果树高位H,树的结点总数为2*H-1,H>=0,称为满二叉树 完全 ...

  9. php之二叉树,数据结构之二叉树——链式存储结构(php代码实现)

    /** * ClearBiTree() 清空二叉树 * CreateBiTree() 创建二叉树 * BiTreeEmpty() 判断二叉树是否为空 * BiTreeDepth() 返回二叉树的深度 ...

最新文章

  1. 二维码Data Matrix的解码实现(zxing-cpp)
  2. 微信公众平台操作获取token类
  3. DFS(入门题,走迷宫)
  4. 对 MVC,MVT 解读的理解
  5. 怎么用java跟数据库建立关系,java – 关系和构建数据库
  6. MatConvNet深度学习工具箱安装教程
  7. php eval 安全性,php – 使用eval解析表单输入的方程式的最安全的方法
  8. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
  9. fedora html 编辑器,分享|在 Fedora 上使用 Pitivi 编辑视频
  10. mysql连接操作_MySQL内连接操作
  11. react-spa小demo
  12. linux运行bak,linux 备份学习
  13. kali利用fluxion无线网络钓鱼
  14. C++析构函数定义和使用
  15. 软件工程第一次作业:写一篇自己的博客
  16. TSN报文优先级(802.1P优先级、IP优先级、TOS优先级)
  17. Lua: 好的, 坏的, 和坑爹的
  18. 汽车变速器(自动挡)英文缩写
  19. 5-11 猿课 笔记
  20. Python 时间序列建模:用指数平滑法预测股价走势

热门文章

  1. java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法
  2. php 树形结构实例,如果用php写树形结构?
  3. 微信小程序开发之scroll-view上拉加载数据实现
  4. python 网络爬虫 选择日期提交得到数据
  5. sqlserver 删除字段_SQL Server 执行计划缓存
  6. git maven 一键部署_Jenkins实现一键部署maven项目
  7. RCNN SPP_net
  8. Java 面试知识点解析(二)——高并发编程篇
  9. Vue.js 组件 处理边界情况
  10. 深入理解多线程(二)—— Java的对象模型