Appearance
题目
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
代码
var countNodes = function(root) {
if(!root) return 0;
let left = root.left;
let right = root.right;
let leftHeight = 0;
let rightHeight = 0;
// 找到最左分支的深度
while(left){
leftHeight++;
left = left.left;
}
// 找到最右分支的深度
while(right){
rightHeight++;
right = right.right;
}
// 相等说明是满二叉树,用公式计算结果
if(leftHeight === rightHeight){
return (2 << leftHeight) - 1;
}
// 不是满二叉树,递归计算左右子树的数量 + 1
return countNodes(root.left) + countNodes(root.right) + 1;
};