论坛: 编程破解 标题: 帮我看一下二叉排序树程序 复制本贴地址    
作者: lovejiang [lovejiang]    论坛用户   登录
#include <stdio.h>
struct rnode{
        int i;
        struct rnode *left;
struct rnode *right;};

void print(rnode *p1)这里有错不过我看不出来这里哪里错了啊

{     
      if(p1!=NULL){
          print(p1->left);
          printf("%d",p1->i);
          print(p1->right);
                  }
}
main()
{    int k;
    rnode *root;
    rnode *p,*s;
    root=(struct rnode*)malloc(sizeof(rnode));
      printf("jaskfsk");
  scanf("%d",&k);
  root->i=k;
  while(k!=-1)
    {
        p=root;
s=(struct rnode*)malloc(sizeof(rnode));
          scanf("%d",&k);
          s->i=k;
              while(p!=NULL){
              if(s->i>p->i)p=p->right;
              if(s->i<p->i)p=p->left;
              }
          p=s;
          }
print(root);
}


[此贴被 lovejiang(lovejiang) 在 04月28日22时04分 编辑过]


[此贴被 lovejiang(lovejiang) 在 04月29日13时56分 编辑过]

地主 发表时间: 04-04-28 18:12

回复: 286 [unique]   版主   登录
1 在C++编译器下编译。
2 struct rnode{
        int i;
        struct rnode *left;
struct rnode *right;};
改为
struct rnode{
        int i;
        rnode *left;
rnode *right;};
也可。
3void print(rnode *p1)这里有错不过我看不出来这里哪里错了啊

{      rnode *p1;
两个rnode *p1重复,删掉后者。

4 while(p!=NULL){
              if(s->i>p->i)p=p->right;
              if(s->i<p->i)p=p->left;
              }
改为while(p!=NULL){
              if(s->i>p->i)
                  p=p->right;
              else
                  p=p->left;
              }
否则相等的时候,会出现异常现象。在此后p=s时导致子树丢失。(因为s->left和s->right未定义。)


最后程序如下:
#include <stdio.h>
#include <stdlib.h>

struct rnode
{
rnode *left;
rnode *right;
int i;
};

void print(rnode *p1)
{
if(p1!=NULL)
{
print(p1->left);
printf("%d",p1->i);
print(p1->right);
}
}

main()
{   
int k;
rnode *root;
rnode *p,*s;
root=(struct rnode*)malloc(sizeof(rnode));
scanf("%d",&k);
root->i=k;
while(k!=-1)
{
p=root;
s=(struct rnode*)malloc(sizeof(rnode));
scanf("%d",&k);
s->i=k;
while(p!=NULL)
{
if(s->i>p->i)
p=p->right;
else
p=p->left;
}
p=s;
}
print(root);
}






B1层 发表时间: 04-04-29 09:18

回复: lida1818 [lida1818]   论坛用户   登录
void print_uu(struct rnode *p1)

{
      if(p1!=NULL){
          print_uu(p1->left);
          printf("%d",p1->i);
          print_uu(p1->right);
                  }

还有下面的也有问题

while(k!=-1)
    {
        p=root;
s=(struct rnode*)malloc(sizeof(struct rnode));//????
          scanf("%d",&k);
          s->i=k;
              while(p!=NULL){
              if(s->i>p->i)p=p->right;
              if(s->i<p->i)p=p->left;
              }
          p=s;
          }

逻辑好象也有问题,看不明白

B2层 发表时间: 04-04-29 09:34

回复: lida1818 [lida1818]   论坛用户   登录
哈哈,286也回了,没看到

B3层 发表时间: 04-04-29 09:36

回复: lovejiang [lovejiang]   论坛用户   登录
to 286
    我这里是TC
我改成这样可以运行了
不过当我输入-1的时候却电脑却不听控制了惨
#include <stdio.h>
struct rnode{
        int i;
        struct rnode *left;
struct rnode *right;};

void print(struct rnode *p1)
{     
      if(p1!=NULL){
          print(p1->left);
          printf("%d",p1->i);
          print(p1->right);
                  }
}
main()
{    int k;
    rnode *root;
    rnode *p,*s;
    root=(struct rnode*)malloc(sizeof(struct rnode));
      printf("jaskfsk");
  scanf("%d",&k);
  root->i=k;
  while(k!=-1)
    {
        p=root;
s=(struct rnode*)malloc(sizeof(struct rnode));
          scanf("%d",&k);
          s->i=k;
              while(p!=NULL){
              if(s->i>p->i)p=p->right;
              else p=p->left;
              }
          p=s;
          }
print(root);
}




[此贴被 lovejiang(lovejiang) 在 04月29日14时10分 编辑过]


[此贴被 lovejiang(lovejiang) 在 04月29日14时12分 编辑过]

B4层 发表时间: 04-04-29 13:57

回复: 286 [unique]   版主   登录
申请完内存后对左右子树未加以控制是一个问题.
你的程序逻辑我没看,只看是否能编译通过而已.你自己看吧.
main()
{   
int k;
rnode *root;
rnode *p,*s;
root=(struct rnode*)malloc(sizeof(rnode));
scanf("%d",&k);
root->left=NULL;///////////////////////////////
root->right=NULL;/////////////////////////////
root->i=k;
while(k!=-1)
{
p=root;
s=(struct rnode*)malloc(sizeof(rnode));
scanf("%d",&k);
s->left=NULL;/////////////////////////////////
s->right=NULL;///////////////////////////////


B5层 发表时间: 04-04-29 17:18

回复: lovejiang [lovejiang]   论坛用户   登录
多谢你
可能还有一点逻辑错误吧
虽然可以运行但是还是不能打印出来
我自己再想一下


B6层 发表时间: 04-04-29 18:40

回复: lovejiang [lovejiang]   论坛用户   登录
还是要请大家帮一下忙
还是不能出现所要的结果
本来数据结构以为看懂了就可以了没想到一上机调试就出现这样的错误就让人找都找不出来
#include <stdio.h>
struct rnode{
        int i;
        struct rnode *left;
struct rnode *right;};

middle(struct rnode *p1)
{
struct rnode *stack[100];
  int top=-1;
do{
      while(p1!=NULL){
                      stack[++top]=p1;
                          p1=p1->left;
                      }
      p1=stack[top];
      top--;
        printf("%d",p1->i);
    p1=p1->right;
  }while(top>0||p1!=NULL);
}


main()
{   
int k;
struct rnode *root;
struct rnode *p,*s;
root=(struct rnode*)malloc(sizeof(struct rnode));
scanf("%d",&k);
root->left=NULL;
root->right=NULL;
root->i=k;
while(k!=-1)
{
p=root;
s=(struct rnode*)malloc(sizeof(struct rnode));
scanf("%d",&k);

s->i=k;
s->left=NULL;
s->right=NULL;
while(p!=NULL){
              if(s->i>p->i)p=p->right;
              else p=p->left;
              }
          p=s;
          }
middle(root);
}

B7层 发表时间: 04-05-04 09:32

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号