LeetCode222

    public static int pow2(int x){
        if(x==1)
            return 1;
        else{
            /**
             * 必须用一个数来保存左移的结果
             * 否则not a statement
             * 移x位,等于乘以x个2
             * 2 《《 x
             * 这样就是2^x+1次方了
             */
            int num = 0;
            num = 1 << x ;
            return num-1;
        }
    }

 

    /**
     *
     * 对于一个节点node,计算它最左端的节点到node的深度为leftDepth,计算它最右端的节点到node的深度是rightDepth;
        如果leftDepth和rightDepth相等,那么以node为根节点的树是一棵满二叉树,此时以node为根节点的树的节点个数是pow(2,leftDepth)-1;
        如果leftDepth和rightDepth不相等,递归求解node的左子树的节点数和右子树的节点数。
     */
    public int countNodes(TreeNode root) {

        if(root==null)
            return 0;

        int leftDepth = 0;
        int rightDepth = 0;

        /**
         * 统计左边子树高度
         */
        for(TreeNode node = root;node!=null;node=node.left)
            leftDepth++;

        for(TreeNode node = root;node!=null;node=node.right)
            rightDepth++;


        if(leftDepth==rightDepth){
            return pow2(leftDepth);
        } else{

            return 1+countNodes(root.left)+countNodes(root.right);

        }



    }

 

posted @ 2018-06-17 12:30  朋友圈  阅读(169)  评论(0编辑  收藏  举报