题目:

求完全二叉树节点数。

思路:

满二叉树的节点数是2^k-1,k是树的深度。

所以我们可以先判断该树是否为满二叉树,然后是的话直接返回结果,如果不是递归地求解子树。

这样不用遍历所有的节点。复杂度小于O(N),比对所有点遍历复杂度要小,最好的情况是O(lgN)。

推算大概在O(lgN)~O(N)之间。

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var countNodes = function(root) {
    if(root==null){
        return 0;
    }
    
    var l=root,r=root;
    var lDep=0,rDep=0;
    
    while(l){
        lDep++;
        l=l.left;
    }
    
    while(r){
        rDep++;
        r=r.right;
    }
    
    if(lDep==rDep){
        return Math.pow(2,lDep)-1;
    }else{
        return countNodes(root.left)+countNodes(root.right)+1;
    }
};

 

相关文章:

  • 2021-11-14
  • 2021-12-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-15
  • 2021-05-16
  • 2021-05-23
  • 2021-12-27
相关资源
相似解决方案