判断一棵树是否是完全二叉树。
来源:互联网 发布:淘宝美工制作流程 编辑:程序博客网 时间:2024/05/19 08:41
提示:层序遍历变型题。
完全二叉树:根节点下除叶子节点外,每个结点的左右子树不能为空,叶子结点重左至右依次存在。
满二叉树:完全二叉树的特殊情况,每一层节点数为2^( n -1 )个。
验证过程,当存节点的队列不为空,则进入循环,遍历二叉树,当左右节点均不为空,则释放当前队头节点,依次存放左左节点,右节点;左为空,右不为空时,不满足条件,则退出并返回false;下来就剩左右均为空,左空右不为空两种情况。
#define _CRT_SECURE_NO_WARNINGS 10#include<iostream>#include<stdlib.h>#include<queue>using namespace std;struct TreeNode{ int _data; TreeNode* _left; TreeNode* _right; TreeNode(int x = 0) :_data(x) , _right(NULL) , _left(NULL) {}};class Tree{public: Tree() :_root(NULL) {} Tree(const int* arr,size_t size,const int invalue) { size_t index = 0; _CreateTree(_root,arr, size,index, invalue); } bool IsComplete() { if (_root == NULL) return false; queue<TreeNode*> q; q.push(_root); while (!q.empty()) { TreeNode* top = q.front(); if (top->_left&&top->_right) { q.pop(); q.push(top->_left); q.push(top->_right); } if (top->_left == NULL&&top->_right) return false; if ((top->_left&&top->_right == NULL) || (top->_left == NULL&&top->_right==NULL)) { q.pop(); while (!q.empty()) { top = q.front(); if (top->_left == NULL&&top->_right == NULL) q.pop(); else return false; } return true; } } return true; }protected: void _CreateTree(TreeNode*& root,const int arr[],size_t size,size_t& index,const int value) { if (index < size&&arr[index] != value) { root = new TreeNode(arr[index]); _CreateTree(root->_left, arr, size, ++index, value); _CreateTree(root->_right, arr, size, ++index, value); } }private: TreeNode* _root;};int main(){ int arr[10] = { 1, 2, 3, '#', '#', 4, '#', '#', 5, 6 }; Tree tree(arr, 10, '#'); cout << tree.IsComplete() << endl; system("pause"); return 0;}
阅读全文
0 0
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- ~判断一棵树是否是完全二叉树~
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是完全二叉树。
- 二叉树--判断一棵树是否是完全二叉树
- 判断是否是完全二叉树
- 判断是否是完全二叉树
- 判断是否是完全二叉树
- 判断一颗树是否是完全二叉树
- 判断一棵树是否是完全二叉树【每日一题】
- 数据结构面试题/判断一棵树是否是完全二叉树
- 判断一棵树是否是一个完全二叉树?
- LinkedList用法及源码解析
- 面向对象编程思想(OOP)
- 在eclipse中创建Maven项目
- HDU 1002
- 39. Combination Sum
- 判断一棵树是否是完全二叉树。
- android 代码规范
- 欢迎使用CSDN-markdown编辑器
- grep命令详解
- Linux系统磁盘配额及阵列
- 解决 Eclipse 项目中有红色感叹号的详细方法(图文)
- Linux基本操作命令
- 利用工具跨域通信(发送请求数据)等
- io--File文件