赞
踩
7,二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法。
思路:采用层次遍历。只有一下两种情况出现时,一棵树才不是完全二叉树
- 一个节点的左子树为空,右子树非空
- 在n层遇到过非空节点,然后在n+1层又遇到了非空节点
- bool isCompleteTree(TreeNode* root) {
- if(!root){
- return true;
- }
- queue<TreeNode *> v;
- v.push(root);
- // 用来标识是否遇到过空
- bool em = false;
- while(!v.empty()){
- int n = v.size();
-
- while(n--){
- TreeNode *p = v.front();
- v.pop();
- // 如果左子树空,右子树不空,指定不符合
- if(!p->left && p->right){
- return false;
- }
- // 曾经遇到过空,又遇到了非空,也不符合
- if(em && (p->left || p->right)){
- return false;
- }
-
- if(!p->left || !p->right){
- em = true;
- }
-
- if(p->left){
- v.push(p->left);
- }
- if(p->right){
- v.push(p->right);
- }
- }
- }
- return true;
-
- }
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。