关于c语言二叉排序树的问题,麻烦大神帮我找下我的错误 谢谢
题目:二叉排序树已知二叉排序树中结点数据域为整数,根据键盘输入不同个数的数据构造二叉排序树,设计递归算法输出树中所有大于或等于给定值x的结点,并以函数的参数返回输出的结点...
题目:
二叉排序树
已知二叉排序树中结点数据域为整数,根据键盘输入不同个数的数据构造二叉排序树,设计递归算法输出树中所有大于或等于给定值x的结点,并以函数的参数返回输出的结点个数并打印。假设以二叉链表为存储结构,其结点结构为:
lchild
data
rchild
输入数据:先输入数据的个数n,然后连续的n行每行一个正整数表示结点的值,最后输入正整数x。
输出数据:输出树中所有大于或等于给定值x的结点的值和这样的结点的个数,每个数据占一行。
Sample input
4
2
7
9
4
7
Sample output
7
9
2
我的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BitNode
{
int data;
struct BitNode *lchild,*rchild;
}BitNode,*Bitree;
int insertBST(Bitree &T,int key)
{
Bitree s;
if (!T)
{
s=(Bitree)malloc(sizeof(BitNode));
s->data=key;
s->lchild=NULL;
s->rchild=NULL;
}
else if (key>T->data)
{
insertBST(T->lchild,key);
}
else if (key<T->data)
{
insertBST(T->rchild,key);
}
return 1;
}
int findBST(Bitree &T,int key)
{
int number;
number=0;
if(!T)
return number;
if (key==T->data)
{
printf("%d\n",T->data);
number++;
findBST(T->rchild,key);
}
if (key>T->data)
{
printf("%d\n",T->data);
number++;
findBST(T->rchild,key);
}
if (key<T->data)
{
return number;
}
}
int main()
{
int i,m,n,shuzu[50],bijiao,number1;
scanf("%d",&m);
for (i=0;i<m;i++)
{
scanf("%d",&shuzu[i]);
}
scanf("%d",&n);
Bitree p1;
for (i=0;i<m;i++)
{
insertBST(p1,shuzu[i]);
}
// scanf("%d",&n);
number1=findBST(p1,n);
printf("%d\n",number1);
return 0;
} 展开
二叉排序树
已知二叉排序树中结点数据域为整数,根据键盘输入不同个数的数据构造二叉排序树,设计递归算法输出树中所有大于或等于给定值x的结点,并以函数的参数返回输出的结点个数并打印。假设以二叉链表为存储结构,其结点结构为:
lchild
data
rchild
输入数据:先输入数据的个数n,然后连续的n行每行一个正整数表示结点的值,最后输入正整数x。
输出数据:输出树中所有大于或等于给定值x的结点的值和这样的结点的个数,每个数据占一行。
Sample input
4
2
7
9
4
7
Sample output
7
9
2
我的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BitNode
{
int data;
struct BitNode *lchild,*rchild;
}BitNode,*Bitree;
int insertBST(Bitree &T,int key)
{
Bitree s;
if (!T)
{
s=(Bitree)malloc(sizeof(BitNode));
s->data=key;
s->lchild=NULL;
s->rchild=NULL;
}
else if (key>T->data)
{
insertBST(T->lchild,key);
}
else if (key<T->data)
{
insertBST(T->rchild,key);
}
return 1;
}
int findBST(Bitree &T,int key)
{
int number;
number=0;
if(!T)
return number;
if (key==T->data)
{
printf("%d\n",T->data);
number++;
findBST(T->rchild,key);
}
if (key>T->data)
{
printf("%d\n",T->data);
number++;
findBST(T->rchild,key);
}
if (key<T->data)
{
return number;
}
}
int main()
{
int i,m,n,shuzu[50],bijiao,number1;
scanf("%d",&m);
for (i=0;i<m;i++)
{
scanf("%d",&shuzu[i]);
}
scanf("%d",&n);
Bitree p1;
for (i=0;i<m;i++)
{
insertBST(p1,shuzu[i]);
}
// scanf("%d",&n);
number1=findBST(p1,n);
printf("%d\n",number1);
return 0;
} 展开
2个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BitNode {
int data;
struct BitNode *lchild, *rchild;
}BitNode, *Bitree;
int insertBST(Bitree *T, int key) {
Bitree s;
if (!*T) {
s = (Bitree)malloc(sizeof(BitNode));
s->data = key;
s->lchild = NULL;
s->rchild = NULL;
*T = s;
}
else if (key>(*T)->data) {
insertBST(&(*T)->rchild, key);
}
else if (key<(*T)->data) {
insertBST(&(*T)->lchild, key);
}
return 1;
}
void findBST(Bitree T, int key, int* number) {
int temp;
temp = 0;
if (!T) {
return;
}
if (key <= T->data) {
printf("%d\n", T->data);
(*number)++;
}
findBST(T->rchild, key, number);
if (key > T->data) {
findBST(T->lchild, key, number);
}
}
int main() {
int i, m, n, shuzu[50], bijiao, number1 = 0;
Bitree p1 = NULL;
scanf("%d", &m);
for (i = 0; i<m; i++) {
scanf("%d", &shuzu[i]);
}
scanf("%d", &n);
for (i = 0; i<m; i++) {
insertBST(&p1, shuzu[i]);
}
// scanf("%d",&n);
findBST(p1, n, &number1);
printf("%d\n", number1);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询