C++二进制树构建为什么不起作用
C++ Binary tree build why wont this work?
大家好,非常感谢您的帮助,谢谢。
首先,我正在构建一个二叉树,但似乎无法构建它。在递归过程中,insertHelper似乎在第一次迭代中识别出一个更大的根,但之后没有继续构建左右和连接到它的节点。请参阅在c++中
标题:
struct Node {
public:
int weight;
Node *right;
Node *left;
};
class Btree {
Node *root;
int insize;
int taxsize;
public:
Btree();
void insertOne(Node *);
void insertHelper(Node *, Node *);
void printTree();
void ptHelper(Node *);
};
类别:
Btree::Btree() {
this -> root = NULL;
this -> insize =0;
this -> taxsize =0;
}
void Btree::insertOne( Node *n ) {
if(root==NULL) {
root = n;
}else {
Node *burr;
burr = root;
insertHelper( n, burr);
}
}
void Btree::insertHelper( Node *n, Node *curr ) {
if(curr==NULL) {
curr = n;
}
if(n->weight > curr->weight) {
insertHelper(n, curr->right);
}
if(n->weight < curr->weight) {
insertHelper(n, curr->left);
}
}
void Btree::printTree() {
Node *current;
current = root;
ptHelper(current);
}
void Btree::ptHelper(Node *m){
if(m != NULL) {
cout<<" "<<m->weight<<" ";
if(m->left != NULL) {
ptHelper(m->left);
}
if(m->right != NULL) {
ptHelper(m->right);
}
}else {
return;
}
}
main:
int main()
{
Btree joe;
int insize;
int taxsize;
cin >> insize;
for(int i=0; i<insize; i++) {
int tmp;
cin >> tmp;
Node *diamond = new Node();
diamond->weight = tmp;
joe.insertOne(diamond);
}
joe.printTree();
return 0;
}
您没有更新对左侧和右侧的引用。试试这个:
void Btree::insertHelper( Node *n, Node *curr ) {
if(curr==NULL) {
curr = n;
}
//My debug output
//cout<<"InsertHelper "<<n->weight<< " to " << curr->weight <<" n";
if(n->weight > curr->weight) {
if (curr->right == NULL) {
curr->right = n;
} else {
insertHelper(n, curr->right);
}
}
if(n->weight < curr->weight) {
if (curr->left == NULL) {
curr->left = n;
} else {
insertHelper(n, curr->left);
}
}
}
注:实际上,最好将接口更改为Btree::insertOne( int n )
。然后,您可以在BTree 中管理节点的生命周期
相关文章:
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 为什么二进制搜索在我的测试中不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 为什么这段代码不起作用,我该如何解决?
- 为什么 zlib 放气初始化调用一次不起作用?
- 为什么 ulimit -v 在 Clang 的地址清理器下不起作用?
- 为什么在 while 循环中返回表达式不起作用
- 为什么这些完全相似的代码不起作用?
- 为什么我的数组双精度函数不起作用?
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 自动点击器在游戏中 - 为什么不起作用?
- 像在 Python 中一样C++循环中的参数解析。为什么不起作用?
- 多维动态数组,为什么不起作用?
- 函数A调用函数B,反之亦然(为什么不起作用)
- C++二进制树构建为什么不起作用