当前位置: 首页 > 知识库问答 >
问题:

二叉搜索树显示为空

何雅惠
2023-03-14
struct node
{
   int data;
   node *left,*right;
};

  class bst
 {
 public:
    node *root;
    bst(){root = NULL;}
   void bst_insert(node*,int);
   void inorder(node*);
   };


void bst::bst_insert(node* x, int d) {
   if (x== NULL) {
      node* tmp = new node;
      tmp->data = d;
      tmp->left = NULL;
      tmp->right = NULL;
      x= tmp;
   }
   else if (d <= x->data)
      bst_insert(x->left,d);
   else
      bst_insert(x->right,d);
}

void bst::inorder(node* x) {
   if(x != NULL) {
      inorder(x->left);
      cout << x->data << " ";
      inorder(x->right);
   }
}

int main() {
   bst b;
   b.bst_insert(b.root,3);
   b.bst_insert(b.root,2);
   b.inorder(b.root);
}

代码看起来很好,但是总是bst没有值并且总是显示为空,并且root是null!!!

共有1个答案

司马高韵
2023-03-14

任何代码都不会将root设置为null以外的任何内容。当您调用inorder时,它不会执行任何操作,因为rootnull

b.bst_insert(b.root,3);

由于root一开始是null,这相当于:

b.bst_insert(NULL,3);

这不会将新创建的节点附加到任何东西上。

 类似资料:
  • 我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

  • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,

  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。

  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 在二元搜索树的情况下,为什么我们不能简单地在一个节点有两个子节点的情况下,将一个节点的前一个节点替换为后一个节点?