尖角 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日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题