二进制搜索树顺序遍历递归函数不能正常工作

时间:2015-11-03 18:56:02

标签: c++ data-structures struct binary-search-tree

我正在尝试使用struct在C ++中创建二叉搜索树。在此代码中,' inorder'功能不起作用。我的代码如下:

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node{
struct node *left, *right,*root;
int data,count;
}*new_node,*tree, *temp,*ruff;
void root_create(){
tree = (struct node *)malloc(sizeof(struct node));
tree->root = NULL;
tree->count=0;
}
void node_create(int data){
new_node = (struct node *)malloc(sizeof(struct node));
new_node->data = data;
new_node->left=NULL;
new_node->right=NULL;
}
node * node_insert(node *tree){
temp = tree->root;
if(temp==NULL){
    temp = new_node;
    temp->count++;
    return temp;
}
else if(temp->left==NULL and temp->right==NULL){
    if(temp->data > new_node->data){
        tree->root->left =  new_node;
    }
    else if(tree->root->data <= new_node->data){
        tree->root->right =  new_node;
    }
    temp->count++;
    return temp;
}
else{
    if(temp->data <= new_node->data){
        return node_insert(temp->right);
    }
    if(temp->data > new_node->data){
        return node_insert(temp->left);
    }
}
}
void inorder(node *){
if(ruff == NULL){
    cout<<"No Data!"<<endl;
    return;
}
if(ruff->left!=NULL){
    inorder(ruff->left);
}
cout<< ruff->data<<endl;

if(ruff->right!=NULL){
    inorder(ruff->right);
}
cout<< ruff->data<<endl;
}
int main()
{
int data=321;
root_create();
node_create(data);
tree->root = node_insert(tree);
data=123;
node_create(data);
tree->root = node_insert(tree);
ruff = tree->root;
inorder(tree);
return 0;
}

在main函数中,我创建了两个节点并将它们附加到tree-&gt; root。我可以从tree-&gt; root访问数据。但是当我调用inorder函数时,它没有显示任何输出。

1 个答案:

答案 0 :(得分:1)

您正在使用静态变量&#34; ruff&#34;在你的inorder函数中,而不是传递的参数,你已经忽略了这个参数。

当你使用它时,inorder()函数非常简单:

  1. 首先,在当前节点的左指针上调用inorder()。
  2. 然后,打印当前节点的值。
  3. 最后,在当前节点的左指针上调用inorder()。
  4. 为了使递归结束,如果传入的节点*为NULL,则需要从inorder()中提前退出。