[英]Binary Tree root is null
我正在嘗試創建一個二叉搜索樹,但它似乎不起作用。 我調試了它,它說根為空。 我不明白為什么它是空的。 我最初在構造函數中將它設置為 null,但是當我調用 insert() 方法時,它不再為 null,對嗎? 有人可以幫助我理解這一點。 謝謝。
#include "stdafx.h"
#include <iostream>
using namespace std;
struct node
{
public:
int value;
node * left;
node * right;
};
class bTree
{
public:
node * root;
public:
bTree();
void insert(node * r, int val);
void insert(int val);
void traversePreorder();
void traversePreorder(node * r);
};
bTree::bTree()
{
root = NULL;
}
void bTree::insert(node * r, int val)
{
if (r == NULL)
{
r = new node();
r->value = val;
r->left = NULL;
r->right = NULL;
return;
}
else
{
if (val <= r->value)
{
insert(r->left, val);
}
else
{
insert(r->right, val);
}
}
}
void bTree::insert(int val)
{
insert(root, val);
}
void bTree::traversePreorder(node * r)
{
if (root == nullptr)
return;
else
{
cout << root->value << " ";
traversePreorder(root->left);
traversePreorder(root->right);
}
}
void bTree::traversePreorder()
{
traversePreorder(root);
}
int main()
{
bTree * myTree = new bTree();
myTree->insert(30);
myTree->insert(40);
myTree->insert(20);
myTree->insert(10);
myTree->insert(50);
myTree->traversePreorder();
return 0;
}
如果你調試到void bTree::insert(node * r, int val)
,你會發現root
根本沒有改變。
在void bTree::insert(node * r, int val)
, r
是按值傳遞的,因此函數內部r
的變化( new
等)與外部變量( root
)無關。 您可以將其更改為通過引用傳遞:
void bTree::insert(node *& r, int val)
請參閱按引用傳遞與按值傳遞之間的區別是什么?
如何將對象傳遞給 C++ 中的函數?
順便說一句:在void bTree::traversePreorder(node * r)
,您應該使用r
,而不是root
:
void bTree::traversePreorder(node * r)
{
if (r == nullptr)
return;
else
{
cout << r->value << " ";
traversePreorder(r->left);
traversePreorder(r->right);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.