Deb*_*Deb 1 c++ segmentation-fault binary-search-tree
使用递归我试图找到树的高度,但输出似乎错误。任何错误?
#include <iostream>
struct node{
int data;
node* left, *right;
};
node* getNode(int item){
node* new_node = new node;
new_node->data = item;
new_node->left = new_node->right = nullptr;
return new_node;
}
node* insert(node* root, int item){
if(root == nullptr){
root = getNode(item);
}
else if(item < root->data){
root->left = insert(root->left, item);
}
else if(item > root->data){
root->right = insert(root->right, item);
}
return root;
}
int height(node* root){
if(root == nullptr){
return 0;
}
else{
return 1+std::max(height(root->left), height(root->right));
}
}
int main()
{
node* root;
root = insert(root, 40);
root = insert(root, 10);
root = insert(root, 20);
root = insert(root, 80);
root = insert(root, 30);
root = insert(root, 1);
std::cout << "\nheight of Tree: " << height(root);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
树的高度应该是 3(如果我没记错的话)但是它的显示是 4。
我正在使用带有 Code::Blocks IDE 的 GNU GCC 编译器,它可以在那里工作,
但是当我在 Programiz c++ 在线编译器上运行相同的代码时,它会显示分段错误,所以也许我做错了什么。
问候
马上,这段代码:
int main()
{
node* root; // <-- uninitialized
root = insert(root, 40); // <-- Using an uninitialized pointer
//...
}
Run Code Online (Sandbox Code Playgroud)
是错误的。
的root是未初始化的指针,并传递一个未初始化的指针insert将调用未定义的行为。
可能的解决方法是简单地做:
node* root = nullptr;