判断二叉树是否为完全二叉树

2022-02-24 19:16:11 浏览数 (1)

完全二叉树的定义(王道):设一棵高度为h,有n个节点的二叉树,当且仅当其中每一个节点都与高度为h的满二叉树编号为1~n的节点一一对应时,称为完全二叉树。下文称呼完全二叉树为CBT。

由定义可知,CBT可以不是满树,但其叶子节点只能出现在最后两层。利用这个性质来判断完全二叉树,使用层序遍历,我们依次将节点入队,而不考虑当前节点的左右孩子节点是否为空而直接入队,这样当我们在出队时发现有空节点,此时判断队列中是否还有非空节点,如果有,则说明此树是CBT。

代码实现:

代码语言:javascript复制
#include <queue>
using namespace std;


struct node {
	int val;
	node *next;
};
bool isCBT(node *root) {
	if (!root) return true;
	queue<node*> q;
	q,push(root);
	while (!q.empty()) {
		node *top = q.top();q.pop();
		if (top) {
			q.push(top->left);
			q.push(top->right);
		} else {
			//说明取出的top节点是空节点,此时看队列中是否还有非空节点
			while (!q.empty()) {
				top = q.top();q.pop();
				if (top) return false; 
			}
		}
	}
	return true;
}

0 人点赞