关于一个c++运行递归的不解,,准备对一棵树进行中序遍历。在运行中发现一个很懵逼的问题,为什么递归到下一个节点(null),递归栈上面节点的数据就变了。
这是那棵树:
这是出问题的那个节点,按照代码逻辑,他的下一步应该是进入null然后直接返回,但是我发现他跳到null中时,前面递归栈的数据变了,我很难理解,为什么啊。
这是递归到那个节点时候的一个数据
这是进入null后的那个数据,地址都没变,他的值就变了。为什么啊。
有没有老大哥帮帮我啊,刚学c++,对于c++写的不是很熟练,是我哪儿写的有问题吗,我不理解啊。
#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;
}