【树】Count Complete Tree Nodes

题目:

求完全二叉树节点数。

思路:

满二叉树的节点数是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;
    }
};

 

posted @ 2016-02-05 09:58  很好玩  阅读(236)  评论(0编辑  收藏  举报