**LeetCode-Count Complete Tree Nodes

35 篇文章 0 订阅

简直不会做(

递归看root的高度h和 左右子的高度 假如右子高度是h-1 说明最后一个节点在右子中 这样的话root + left大小是 2 ^ h 根据等比数列求和算出来的 再加上递归右子的count(right)

假如右子高度不是h-1说明最后一个node在左子中, 就是root + right 大小 这时候righ是完整的 总共 2 ^ h-1 也是等比求和 再递归左子

注意 << 这个符号的precedence很低 要加括号!!!

public class Solution {
    public int countNodes(TreeNode root) {
        int h = height ( root );
        if ( h < 0 )
            return 0;
        int right = height ( root.right );
        int count = 0;
        if ( right == h - 1 ){
            count = ( 1 << h )  + countNodes ( root.right );
        }
        else 
            count = ( 1 << h - 1) + countNodes ( root.left );
        return count;
    }
    public int height ( TreeNode node ){
        if ( node == null )
            return -1;
        return 1 + height ( node.left );
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值