二叉树的根为空
Binary Tree root is null
本文关键字:二叉树 更新时间:2023-10-16
我试图创建一个二叉搜索树,但它似乎不工作。我调试过了,它说根是空的。我不明白为什么它是空的。我在构造函数中最初将其设置为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++中传递对象到函数?
BTW:在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);
}
}
生活相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 二叉树基准测试结果
- 带有矢量重复值的二叉树打印出来
- 签入二叉树的函数是平衡C++
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 如何计算给定数字在二叉树中出现的次数?
- 为什么我的二叉树会覆盖其根的叶子?
- 将二叉树的节点插入链表 (C++)
- 二叉树级别顺序插入 c++
- 在 C++ 中创建两个不同的二叉树时出现分段错误
- 如何在使用 ItemType 的模板类时将新节点插入二叉树 c++.(我是 c++ 的新手)