leetcode 二叉树的完全性检验 中等
Posted Wh1t3zZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 二叉树的完全性检验 中等相关的知识,希望对你有一定的参考价值。
使用 bfs 按照完全二叉树的定义进行判定即可。
第一点:每到新的一层时,判断上一层节点数量是否与与其一致。并初始化新一层的结点数量等 tag 意义变量
第二点:用一个变量 tag 来表示当前层到目前为止是否出现过某个儿子为空的情况,如果 bfs 的当前节点儿子存在,并且 tag 为 true,就表示前面镂空,返回false
class Solution { public: bool isCompleteTree(TreeNode* root) { if(!root) return true; int nowDep = 1, nowNums = 0; queue<pair<TreeNode*, int>> que; que.push({root, 1}); // nHeightNums 表示每一层应该出现的节点数量 // tag 表示某一层前面是否出现过空掉的情况 int nHeightNums = 1, tag = false; while(!que.empty()) { auto front = que.front(); que.pop(); if(front.second == nowDep) ++ nowNums; else { if(nowNums != nHeightNums) return false; nowNums = 1; nHeightNums *= 2; tag = false; } if(front.first -> left) { if(tag) return false; que.push({front.first -> left, front.second + 1}); } else tag = true; if(front.first -> right) { if(tag) return false; que.push({front.first -> right, front.second + 1}); } else tag = true; nowDep = front.second; } return true; } };
以上是关于leetcode 二叉树的完全性检验 中等的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode-958 Check Completeness of a Binary Tree(二叉树的完全性检验)