![](/img/trans.png)
[英]0 I'm working on a leetcode problem: Given the root of a binary tree, return the inorder traversal of its nodes' values
[英]My binary search tree c program has a problem.I am using inorder traversal.only root node printed why?
它是一个具有中序遍历的二叉搜索树。打印元素时出现问题。 我无法解决这个问题。只有根正在打印。它也可能是语义错误。也许插入有问题。或者显示无序有问题。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *llink;
struct node *rlink;
};
typedef struct node bstnode;
bstnode *root=NULL;
void insert(int ele)
{
bstnode *cur,*prev,*temp;
temp=(bstnode *)malloc(sizeof(bstnode));
temp->data=ele;
temp->llink=temp->rlink=NULL;
cur=root;
prev=NULL;
if(root==NULL)
root=temp;
else
{
prev=cur;
while(cur!=NULL)
{
if(ele<cur->data)
cur=cur->llink;
else
cur=cur->rlink;
}
if(ele<prev->data)
prev->llink=temp;
else
prev->rlink=temp;
}
//return root;
}
void inorder()
{
if(root==NULL)
{
return;}
else{
inorder(root->llink);
printf("\n%d",root->data);
inorder(root->llink);
}
}
int main()
{
insert(45);
insert(76);
inorder();
}
在这个代码片段中
else
{
prev=cur;
while(cur!=NULL)
{
if(ele<cur->data)
cur=cur->llink;
else
cur=cur->rlink;
}
if(ele<prev->data)
prev->llink=temp;
else
prev->rlink=temp;
}
有一个逻辑错误。 该声明
prev=cur;
应在以下 while 语句中。 例如
while(cur!=NULL)
{
prev=cur;
if(ele<cur->data)
cur=cur->llink;
else
cur=cur->rlink;
}
和函数inorder
。 同样不正确,因为它是在没有参数的情况下声明的
void inorder()
{
if(root==NULL)
{
return;}
else{
inorder(root->llink);
printf("\n%d",root->data);
inorder(root->llink);
}
}
还有两次使用数据成员llink
。
它应该像这样声明和定义
void inorder( const bstnode *node )
{
if ( node )
{
inorder( node->llink );
printf( "\n%d", node->data );
inorder( node->rlink );
}
}
它被称为
inorder( root );
首先,部分
prev=cur;
while(cur!=NULL)
{
if(ele<cur->data)
cur=cur->llink;
else
cur=cur->rlink;
}
是错的。
由于prev=cur;
位置不对prev=cur;
, prev
将只是root
而不是指向要成为新节点父节点的节点。 该语句应该在循环内:
while(cur!=NULL)
{
prev=cur;
if(ele<cur->data)
cur=cur->llink;
else
cur=cur->rlink;
}
其次,函数inorder
错误。 当root != NULL
时无条件执行。
代替忽略参数并无限打印root
,它应该使用一个参数来指定应该打印哪个节点。
使用llink
也很奇怪。
它可以是这样的:
void inorder(bstnode* node)
{
if(node==NULL)
{
return;
}
else{
inorder(node->llink);
printf("\n%d",node->data);
inorder(node->rlink);
}
}
和inorder();
在main
函数中应该是inorder(root);
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.