动不了一点 2024-01-31 21:56 采纳率: 17.2%
浏览 6

为什么我这个程序输入怎么改输出都会是同一个数4?

无论这样输出都是同一个数字


#include "iostream"
using std::cin;
using std::cout;
using std::endl;
int n,a,b,temp=1;
int max;
struct Tree{
    int data;
    struct Tree* lchild;
    struct Tree* rchild;
};

void dfs(int x, Tree* T) {
    if (T == NULL)
        return;
    if (T->data == x)
    {
        if (a != 0) {
            Tree* q = new Tree;
            q->data = a;
            T->lchild = q;
            q->lchild = NULL;
            q->rchild = NULL;
        }
        else T->lchild = NULL;
        if (b != 0) {
            Tree* p = new Tree;
            p->data = b;
            T->rchild = p;
            p->lchild = NULL;
            p->rchild = NULL;
        }
        else T->rchild = NULL;
        return;
    }
    dfs(x, T->lchild);
    dfs(x, T->rchild);
}

void dfs2(Tree* T, int temp) {
    if (T == NULL) {
        if (temp - 1 > max)
        {
            max = temp - 1;
        }
        return;
    }
    dfs2(T->lchild, temp + 1);
    dfs2(T->rchild, temp + 1);
    
}
int main() {
    cin >> n;
    Tree* root = new Tree;
    root->data = 1;
    cin >> a >> b;
    if (a != 0) {
        Tree* q = new Tree;
        q->data = a;
        root->lchild = q;
        q->lchild = NULL;
        q->rchild = NULL;
    }
    else root->lchild = NULL;
    if (b != 0) {
        Tree* p = new Tree;
        p->data = b;
        root->rchild = p;
        p->lchild = NULL;
        p->rchild = NULL;
    }
    else root->rchild = NULL;
    for (int i = 1; i < n; i++) {
        cin >> a >> b;
        dfs(i + 1, root);
    }
    dfs2(root,temp);
    cout << max;
}
  • 写回答

4条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-01-31 21:57
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在您提供的程序中,变量max用于存储从根节点到叶节点的最大深度。然而,在整个代码中,您并没有更新max的值。在dfs2函数中,尽管计算了路径长度(通过temp变量),但没有将符合条件的temp-1值赋给max

    为了修复此问题,请在dfs2函数中添加一行更新max的语句:

    void dfs2(Tree* T, int temp) {
        if (T == NULL) {
            if (temp - 1 > max) {
                max = temp - 1;
            }
            return;
        }
        dfs2(T->lchild, temp + 1);
        dfs2(T->rchild, temp + 1);
    
        // 添加以下代码行以确保在所有递归调用中找到最大深度
        if (temp - 1 > max) {
            max = temp - 1;
        }
    }
    

    这样,当函数遍历整个树并找到最长路径时,会正确更新max的值。同时,请确保在main函数开始前初始化max为一个较小的数,例如0:

    int max = 0;
    

    现在,根据输入的树结构和遍历顺序,程序应该能输出正确的最大深度。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月31日

悬赏问题

  • ¥15 微信小程序web-view嵌套H5页面IOS左滑会出现相同的页面,有什么解决方法吗?
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼