https://leetcode.cn/problems/count-complete-tree-nodes/
给出一个完全二叉树,求出该树的节点个数。用完全二叉树方法比较复杂,所以考虑用简单的递归和
迭代进行遍历并求知。
首先使用递归的方法:
这道题本质上是要遍历左右二叉树,然后进行统计。用递归解决的话,可以在递归中顺便定义左孩子和有孩子的数量,然后进行求和(不要忘记还有一个根节点)如果用迭代的方法解决的话,则可以考虑在层序遍历中的每一层循环中统计节点数目。具体代码如下:
递归:
class Solution {
public:
int countNodes(TreeNode* root) {
return getNodesnums(root);
}
private:
int getNodesnums(TreeNode* cur){
if (cur == NULL) return 0;
int leftnum = getNodesnums(cur -> left);
int rightnum = getNodesnums(cur -> right);
int sum = leftnum + rightnum + 1;
return sum;
}
};
迭代:
class Solution {
public:
int countNodes(TreeNode* root) {
int result = 0;
queue<TreeNode*> que;
if(root == nullptr)return result;
que.push(root);
while(!que.empty()){
int size = que.size();
for(int i = 0; i<size; i++){
TreeNode* node = que.front();
que.pop();
result++;
if(node -> left) que.push(node ->left);
if(node -> right) que.push(node ->right);
}
}return result;
}
};