题解 | #二叉树#

二叉树

https://www.nowcoder.com/practice/f74c7506538b44399f2849eba2f050b5

#include <iostream>
using namespace std;

/**
    node:当前结点
    totalNode:总结点数
    return:编号为node的结点有多少个孩子结点(包括node)
*/
int sum(int node, int totalNode){
    if(totalNode / 2 == node){ //当前结点的下一层就是叶结点了
        if(totalNode % 2 == 0){ //只有左孩子
            return 1 + 1;
        }else{ //左右孩子都有
            return 2 + 1;
        }
    }else if(totalNode / 2 < node){ //倒数第二层,靠右边的叶结点
        return 1;
    }else{ //totalNode / 2 > node 比较上层的结点
        return sum(node * 2, totalNode) + sum(node * 2 + 1, totalNode) + 1;
    }
}

int main() {
    int m,n; //m当前结点, n总结点
    while (scanf("%d %d", &m, &n) != EOF) { // 注意 while 处理多个 case
        if(0 == m && 0 == n){
            break;
        }
        printf("%d\n", sum(m, n));
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
S_Holmes:一想到我苦苦追求的迪子私下里却是985的马子,我的心就在滴血😭😭😭
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务