题目
完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例 1:
输入:root = [1,2,3,4,5,6]
输出:6
示例 2:
输入:root = []
输出:0
示例 3:
输入:root = [1]
输出:1
思路1:
深度优先搜索整个二叉树即可。这里以前序遍历为例。
代码如下:
var countNodes = function(root) {
count = 0;
countNode(root);
return count;
};
function countNode(root){
if(root == null) return null;
count++;
countNode(root.left)
countNode(root.right)
}
代码可以写的更精简一点如下:
/**
* @param {TreeNode} root
* @return {number}
*/
var countNodes = function(root) {
if(root == null){
return 0
}
return 1 + countNodes(root.left) + countNodes(root.right)
};
思路2:
广度优先搜索整个二叉树,这里以层序遍历为例
代码如下:
function countNodes(root) {
let res = 0;
if(root == null) return res;
let queue = [];
queue.push(root);
while(queue.length>0){
let size = queue.length;
res += size;
while(size>0){
let node = queue.pop();
if(node.left) queue.push(node.left);
if(node.right) queue.push(node.right);
size--
}
}
return res;
}
思路3:
位运算,这个后续学习一下补上