尖角 2022-08-27 22:34 采纳率: 100%
浏览 44
已结题

关于#c++#的问题,如何解决?

关于一个c++运行递归的不解,,准备对一棵树进行中序遍历。在运行中发现一个很懵逼的问题,为什么递归到下一个节点(null),递归栈上面节点的数据就变了。

这是那棵树:

img

这是出问题的那个节点,按照代码逻辑,他的下一步应该是进入null然后直接返回,但是我发现他跳到null中时,前面递归栈的数据变了,我很难理解,为什么啊。

img

这是递归到那个节点时候的一个数据

img

这是进入null后的那个数据,地址都没变,他的值就变了。为什么啊。
有没有老大哥帮帮我啊,刚学c++,对于c++写的不是很熟练,是我哪儿写的有问题吗,我不理解啊。

img

#include <iostream>


typedef struct TreeNode {
    int data;
    TreeNode *left, *right;
} TreeNode, *Tree;

void initTree(Tree &t) {
    TreeNode t1[10];
  https://img-mid.csdnimg.cn/release/static/image/mid/ask/794916016166172.png "#left")
  for (int i = 0; i < 10; ++i) {
        t1[i].data = i;
        t1[i].left = nullptr;
        t1[i].right = nullptr;
    }
    t->left = &t1[0];
    t1[0].left = &t1[1];
    t1[0].right = &t1[2];
    t1[1].left = &t1[3];
    t1[1].right = &t1[4];
    t->right = &t1[5];
    t1[5].left = &t1[6];
    t1[6].left = &t1[7];
    t1[6].right = &t1[8];
    t1[5].right = &t1[9];
}


void visit(Tree t) {
    if (t != nullptr) {
        visit(t->left);
        printf(" %d ", t->data);
        visit(t->left);
    }
}

int main() {
    Tree tree = static_cast<Tree>(malloc(sizeof(TreeNode)));
    tree->data = -1;
    tree->left = nullptr;
    tree->right = nullptr;
    initTree(tree);
    visit(tree);
    return 0;
}


  • 写回答

1条回答 默认 最新

  • 烟雨龙升 2022-08-27 22:45
    关注

    你的两次visit里面都是t->left

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 赞助了问题酬金5元 8月28日
  • 创建了问题 8月27日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像