判断一棵树是不是满二叉树
来源:互联网 发布:c专家编程读书笔记 编辑:程序博客网 时间:2024/05/17 02:29
满二叉树的定义:除最后一层是叶子结点,其他各层都有两个孩子结点。
将定义形象化为编程条件:
(1)只有最后一层是叶子结点:
那么这个叶子结点一定是这一层的第一个,并且这个结点以后的结点都是叶子结点,下面两种情况不是满二叉树。
第一图,第一个叶子结点不是这一层第一个结点,第二图第一个叶子结点的后续结点不全是叶子结点。
(2)其他各层都有两个孩子
除最后一层,其他层如果出现只有一个孩子的情况,就不是满二叉树,例如有左孩子无右孩子或有右孩子无左孩子。
一、二叉树结构体表示如下:
struct TreeNode{ TreeNode(int value):left(NULL),right(NULL),val(value){ } TreeNode *left; TreeNode *right; int val;};二、用先序建立二叉树(递归或非递归都可以)
三、主程序代码:
采用BFS进行遍历。
bool JudgeFullBinaryTree(TreeNode *node){if(node == NULL) return true;typedef std::pair<TreeNode*,int> PTI; //pair的第二个模版参数用于记录层数queue<PTI> q;q.push(PTI(node, 1));PTI curnode ;int prevdeepth = 0;//用flag标识第一次出现叶子结点,其后的所有结点应该是叶子结点int flag = false; while(!q.empty()){curnode = q.front();q.pop();if((curnode.first->left == NULL && curnode.first->right != NULL) //只有右孩子||curnode.first->left != NULL && curnode.first->right == NULL) //只有左孩子return false;if(flag){if(curnode.first->left == NULL && curnode.fisrt->right == NULL);elsereturn false; //叶子结点后续结点有非叶子结点}else{if(curnode.first->left == NULL && curnode.first->right == NULL){if(curnode.second > prevdeepth){ //每一层的第一个结点一定大于前一结点的层数flag = true;}else{ //如果层数不大于前一结点层数,那一定是同一层return false;}}else{q.push(PTI(curnode.first->left, curnode.second + 1));q.push(PTI(curnode.first->right, curnode.second + 1));}}prevdeepth = curnode.second;}return true;}四、主调用接口:
int main(void){TreeNode *root = NULL;PreoderBuildTree(root);if(JudgeFullBinaryTree(root))std::cout << "True" << std::endl;elsestd::cout << "False" << std::endl;}
0 0
- 判断一棵树是不是满二叉树
- 判断一棵树是不是平衡二叉树
- 判断一棵树是不是二叉搜索树
- 判断一棵树是不是二叉搜索树
- 判断一棵树是不是完全二叉树
- 判断一棵树是不是完全二叉树
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡[
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断是不是平衡二叉树
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断是不是完全二叉树
- 判断二叉树是不是平衡二叉树
- 判断二叉树是不是完全二叉树
- 判断二叉树是不是平衡二叉树
- IT忍者神龟之Javascript开发工具
- Native App、Web App、Hybrid App的区别
- 利用Three.js构建粒子系统
- UML 回顾与复习
- [剑指offer]调整数组顺序使奇数位于偶数前面
- 判断一棵树是不是满二叉树
- Studio 快捷键集总
- 搜索总结
- hdu2544 迪杰斯特拉题目优化
- 关于java中String、StringBuffer、StringBuilder
- read file by bash shell just as getline() in c++
- 1004-Toxophily
- C++走向远洋——39(指向学生类的指针)
- 小记