222. 完全二叉树的节点个数
var countNodes = function(root) {
let res = 0;
function traverse(root){
if(!root) return;
res++;
traverse(root.left);
traverse(root.right);
}
traverse(root)
return res;
};
var countNodes = function (root) {
if (!root) return 0;
// 计算树的高度
let leftHeight = 0;
let rightHeight = 0;
let left = root;
let right = root;
// 计算左边界高度
while (left) {
leftHeight++;
left = left.left;
}
// 计算右边界高度
while (right) {
rightHeight++;
right = right.right;
}
// 如果左右高度相同,说明是满二叉树
if (leftHeight === rightHeight) {
return 2 ** leftHeight - 1;
}
// 否则递归计算
return 1 + countNodes(root.left) + countNodes(root.right);
};