用时:80min
拿到题的第一个反应当然是DFS解决….
但是这是一个完全二叉树,怎么说也应该把完全二叉树的性质用上才行
可以考察二叉树的左右子树深度
如果左深度 大于 右 , 说明右边已经满了,满了的个数是 2 的 n 次方 - 1,加上root 是 2 的 n次方,继续递归左边
如果右深度大于左, 说明左边满了,同样,继续递归右边
至于怎么求二叉树的深度,可以从下往上递归
var count = function(root) {
if (root === null) return 0 return Math.max(count(root.left),count(root.right)) + 1}那么总体的代码就是
var countNodes = function(root) {
if (!root) {
return 0 }
var count = function(root) {
if (root === null) return 0 return Math.max(count(root.left),count(root.right)) + 1 }
var leftLevel = count(root.left)
var rightLevel = count(root.right)
if (leftLevel === rightLevel) {
return Math.pow(2,leftLevel) + countNodes(root.right)
} else {
return Math.pow(2,rightLevel ) + countNodes(root.left)
}
};