【面试题】判断一棵二叉树是否是完全二叉树
2017-07-27 23:48
267 查看
判断一棵树是否是完全二叉树,这道题是层序遍历二叉树的升级版,其实运用的知识就是层序遍历。
我们先来回顾一下如何层序遍历一棵二叉树
二叉树的结构:
层序遍历二叉树
下面来看如何运用层序判断是不是完全二叉树。
怎么理解什么是完全二叉树呢?
类似于(a)图中的二叉树就是完全二叉树,类似于(b)图中的二叉树就是非完全二叉树。
我们举例来理解一下上述代码
有一颗二叉树如下:
分析如下:
我们先来回顾一下如何层序遍历一棵二叉树
二叉树的结构:
template<class T> struct BinaryTreeNode { T _data; BinaryTreeNode<T>* _left; BinaryTreeNode<T>* _right; BinaryTreeNode(const T& x) :_data(x) , _left(NULL) , _right(NULL){} };
层序遍历二叉树
void LevelOrder()//层序 队列 { queue<Node*> q; if (_root) { q.push(_root); } while (!q.empty()) { Node* front = q.front(); cout << front->_data << " ";//取对头数据 q.pop(); if (front->_left) q.push(front->_left); if (front->_right) { q.push(front->_right); } } cout << endl; }
下面来看如何运用层序判断是不是完全二叉树。
怎么理解什么是完全二叉树呢?
类似于(a)图中的二叉树就是完全二叉树,类似于(b)图中的二叉树就是非完全二叉树。
bool Complete(Node* root) { queue<Node*> q; Node* cur = NULL; if (root) q.push(root); while (cur = q.pop() != NULL) { q.push(cur->_left); q.push(cur->_right); } while (!q.empty()) { cur = q.pop(); if (cur != NULL) { return false; } } return true; }
我们举例来理解一下上述代码
有一颗二叉树如下:
分析如下:
相关文章推荐
- 二叉树面试题-镜像与判断是否为完全二叉树
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 面试题:判断一个节点是否在一棵二叉树中
- 数据结构面试题/判断一棵二叉树是否是平衡二叉树
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 通过队列实现判断一棵二叉树是否为完全二叉树
- 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
- 判断一棵二叉树是否是完全二叉树
- 判断一棵二叉树是否是完全二叉树的方法
- 如何判断一棵二叉树是否是完全二叉树
- 剑指Offer 面试题28:判断一棵二叉树是否镜对称 Java代码实现
- 二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树
- 面试题19:如何判断一棵二叉树是完全二叉树?
- 判断一棵二叉树是否为完全二叉树
- 判断一棵二叉树是否为完全二叉树
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- 判断一棵二叉树是否是完全二叉树
- 8-32 判断一棵二叉树是否是完全二叉树
- 二叉树面试题—前,中,后序(非递归),判断是否为完全二叉树
- 二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。