为什么我不能打印二叉树?
Why can't i print binary tree?
我创建了一个类二叉搜索树。
但问题是,当我打印树时,它崩溃了。
我认为它可以是一个无穷递归函数print()。
我的代码
struct node{
node *l,*r;
int data;
};
class BinTree
{
private: node *root;
public:
BinTree(){ root=NULL; }
void add(int a){ add_node(a,root); };
void add_node(int a, node *rot)
{ node *curr; curr=rot;
if(curr==NULL)
{
curr=new node;
curr->data=a;
curr->l=NULL;
curr->r=NULL;
return;
}
if(a>=curr->data) curr=curr->r,add_node(a,curr);
if(a<curr->data) curr=curr->l,add_node(a,curr);
}
void print(){ inorder(root); }
void inorder(node *curr)
{
if(curr->l!=NULL) inorder(curr->l);
cout<<curr->data<<" ";
if(curr->r!=NULL) inorder(curr->r);
}
};
有人能帮我吗?
在您的add_node
方法中,您从未实际将值分配给根。应该是这样的:
if(curr==NULL)
{
curr=new node;
curr->data=a;
curr->l=NULL;
curr->r=NULL;
root = curr;
return;
}
但是,对于将来,我有与Basile相同的建议-使用您的编译器和调试器。
您的add_node
坏了。如果curr
是NULL
,它会创建一个新节点,但不会将其添加到现有树中。因此,您所添加的所有内容都将被有效地忽略,并且树将保持为空。
inorder
函数取消引用curr
而不检查是否为NULL
, print
调用root
而不检查NULL
。因此,您的崩溃很可能是由于试图打印一个空树,然后解引用一个空指针引起的。
学习如何使用调试器在编译器中启用所有警告。
在Linux上,这意味着用g++ -Wall -g
编译,用gdb
调试
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 打印二叉树中的常见元素
- 带有矢量重复值的二叉树打印出来
- 如何修复以下代码以进行二叉树级别订单打印
- C++二叉树打印函数实现
- C++打印二叉树中的所有值
- 打印具有空节点的二叉树
- 程序设置二叉树,打印和搜索 - 节点类C++
- 按顺序打印时遇到问题,二叉树的后顺序等
- 打印出我的二叉树时出现问题
- 二叉树和特殊节点打印
- 逐层遍历和打印二叉树
- 打印二叉树节点
- 二叉树:迭代顺序打印
- 打印二叉树- c++
- 为什么我不能打印二叉树?
- c++递归打印二叉树的顺序问题