首页 > 其他 > 详细

【树】Count Complete Tree Nodes

时间:2016-02-05 11:33:34      阅读:135      评论:0      收藏:0      [点我收藏+]

题目:

求完全二叉树节点数。

思路:

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

 

【树】Count Complete Tree Nodes

原文:http://www.cnblogs.com/shytong/p/5182733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!