题解 | #树查找#结点忘记加入队列了,debug了好久

树查找

https://www.nowcoder.com/practice/9a10d5e7d99c45e2a462644d46c428e4

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
#include <queue>
#include <cmath>
using namespace std;

struct TreeNode {
    TreeNode* leftChild;
    TreeNode* rightChild;
    int data;
};

queue<TreeNode*> que;

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        TreeNode* root = new TreeNode; //创造一个根结点

        root->leftChild = NULL;
        root->rightChild = NULL;
        scanf("%d", &root->data); //输入根结点的值
        que.push(root); //把根结点放入队列

        int curNodeNum = 1;
        while (curNodeNum < n) { //当前结点数量 < 要求的结点数量

            TreeNode* t = new TreeNode; //创建一个新的结点
            t->leftChild = NULL;
            t->rightChild = NULL;
            scanf("%d", &t->data); //输入该结点的值

            TreeNode* cur = que.front(); //当前队头结点
            que.pop();
            cur->leftChild = t; //把 t 放到 当前队头结点 的 左孩子
            que.push(t); //放入队列中
		  
            if (++curNodeNum >= n) { //如果加入这个结点以后就没了,就退出循环
                break;
            }

            TreeNode* t1 = new TreeNode; //再进行一次以上操作
            t1->leftChild = NULL;
            t1->rightChild = NULL;
            scanf("%d", &t1->data);

            cur->rightChild = t1; //放在右子树
            que.push(t1);
            if (++curNodeNum >= n) {
                break;
            }
        }

        int d;
        scanf("%d", &d);
        int total = 0;
        int two = 1;
        //计算一下在d这个深度有没有结点
        for (int j = 1; j < d; j++) {
            total += two;
            two *= 2;
        }
        if (n <= total) {
            printf("EMPTY\n");
            continue;
        }

        int curdeep = 1;
        while (!que.empty()) {
            que.pop();
        }
        que.push(root);
        while (curdeep != d) {
            int size = que.size();
            for (int i = 0; i < size; i++) {
                TreeNode* curnode = que.front();
                que.pop();
                if (curnode->leftChild != NULL) {
                    que.push(curnode->leftChild);
                }
                if (curnode->rightChild != NULL) {
                    que.push(curnode->rightChild);
                }
            }
            curdeep++;
        }
        //curdeep == d
        int size = que.size();
        for (int i = 0; i < size; i++) {
            TreeNode* curnode = que.front();
            que.pop();
            printf("%d ", curnode->data);
        }
        printf("\n");
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-04 02:00
offer1:字节跳动(北京)-&nbsp;后端开发岗-&nbsp;薪资:总包42w(基本工资30w+绩效6w+年终奖6w),15薪,加班费按法定标准发放-&nbsp;福利:公积金按12%缴纳,无宿舍,每月住房补贴2000元,餐补1500元,每年2次体检,免费健身房-&nbsp;工作强度:996是常态,忙的时候可能到凌晨,团队节奏快,压力大-&nbsp;其他:平台大,技术氛围浓,晋升路径清晰,对转行选手来说履历加分多,但北京生活成本高,租房压力大offer2:美团(上海)-&nbsp;客户端开发岗-&nbsp;薪资:总包38w(基本工资26w+绩效5w+年终奖7w),14薪,加班无加班费,可调休-&nbsp;福利:公积金按10%缴纳,无宿舍,每月住房补贴1800元,餐补800元,每年1次体检,节日福利丰富-&nbsp;工作强度:995为主,偶尔周末加班,项目紧急时会通宵,整体压力中等-&nbsp;其他:公司业务成熟,行业地位稳固,客户端岗位需求稳定,上海生活节奏比北京稍缓,但租房成本仍较高offer3:网易(杭州)-&nbsp;测试开发岗-&nbsp;薪资:总包32w(基本工资22w+绩效4w+年终奖6w),13薪,加班较少,无加班费-&nbsp;福利:公积金按12%缴纳,提供员工宿舍(单人间,前两年免费,第三年按市场价5折),每月餐补1000元,每年1次体检+1次旅游补贴-&nbsp;工作强度:965为主,几乎无强制加班,团队氛围轻松,摸鱼文化盛行-&nbsp;其他:杭州生活成本低于北上,宿舍省房租,测试开发岗入门难度低,适合转行过渡,但技术成长速度可能不如开发岗,未来跳槽竞争力未知本人情况:传统工科转行,编程基础一般,想快速提升技术能力,同时也希望工作生活能平衡,未来不确定是否留在一线城市。有没有同款转行选手或互联网前辈给点建议呀?
森七菜:梦到什么说什么属于是
点赞 评论 收藏
分享
之前自己不懂事,投了字节,基本是自己第一次面试,一面就挂了
观水:前几天有个学化学的做前端,加上实习面了22次字节最后成功了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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