C++ 中的二叉树
Binary Tree in C++
我正在尝试用 C++ 实现一个二叉树,并以根-左-右的方式横切它。添加所有节点后,我在这一行发生崩溃:
cout << r->st->st->info << endl; //trying to print root->left->left->info
我的 RSD 函数没有打印任何东西。另外,如果有任何关于如何使用调试器的 Visual Studio 教程,我将不胜感激。谢谢。
#include<iostream>
using namespace std;
struct Nod{
int info;
Nod *st, *dr;
};
int read_tree(Nod *r)
{
int info;
cout << "Info: "; cin >> info;
if (info!=0)
{
r = new Nod;
r->info = info;
read_tree(r->st);
read_tree(r->dr);
}
else
return 0;
}
void RSD(Nod *r)
{
if (r != NULL)
{
cout << r->info << " ";
RSD(r->st);
RSD(r->dr);
}
}
int main()
{
Nod *r = NULL;
read_tree(r);
system("Pause");
cout << r->st->st->info << endl;
cout << r->dr->info;
RSD(r);
}
问题是您将指针的副本传递给 read_tree
函数。也就是说,当您在主函数中调用 read_tree(r)
时,无论 read_tree
函数内部发生了什么,r
仍然是 NULL
。您可以通过引用传递指针来修复它。也就是说,将 read_tree(Nod* r)
更改为 read_tree(Nod*& r)
应该可以修复它。
我正在尝试用 C++ 实现一个二叉树,并以根-左-右的方式横切它。添加所有节点后,我在这一行发生崩溃:
cout << r->st->st->info << endl; //trying to print root->left->left->info
我的 RSD 函数没有打印任何东西。另外,如果有任何关于如何使用调试器的 Visual Studio 教程,我将不胜感激。谢谢。
#include<iostream>
using namespace std;
struct Nod{
int info;
Nod *st, *dr;
};
int read_tree(Nod *r)
{
int info;
cout << "Info: "; cin >> info;
if (info!=0)
{
r = new Nod;
r->info = info;
read_tree(r->st);
read_tree(r->dr);
}
else
return 0;
}
void RSD(Nod *r)
{
if (r != NULL)
{
cout << r->info << " ";
RSD(r->st);
RSD(r->dr);
}
}
int main()
{
Nod *r = NULL;
read_tree(r);
system("Pause");
cout << r->st->st->info << endl;
cout << r->dr->info;
RSD(r);
}
问题是您将指针的副本传递给 read_tree
函数。也就是说,当您在主函数中调用 read_tree(r)
时,无论 read_tree
函数内部发生了什么,r
仍然是 NULL
。您可以通过引用传递指针来修复它。也就是说,将 read_tree(Nod* r)
更改为 read_tree(Nod*& r)
应该可以修复它。