为了账号安全,请及时绑定邮箱和手机立即绑定

满二叉树建立过程中的问题

下面是我写的代码,有个问题是(解释:满二叉树建立中,由我们输入深度D)为什么找到了父节点的地址,但是返回值为空,希望回答的人看完程序和运行结果回答,不知道是代码的问题还是软件的问题

#include <iostream>

#include <stdio.h>

#include <math.h>

#include <malloc.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

typedef struct _Node

{

int id;

struct _Node *pParent,*pLeft,*pRight;

}*pNode,Node;


typedef struct _PBtree

{

pNode root;

}*pBtree,Btree;


pNode find(pNode m,int i)

{    pNode node;

if(m->id==i) {printf("已经找到%d节点地址为 %d\n",i,m);return (m);

}

if(m->pLeft!=NULL) 

find(m->pLeft,i);

if(m->pRight!=NULL) 

    find(m->pRight,i);

    

   

}


int add1(pNode root,int parent,int i)

{    pNode np;

     pNode pnew;

     pnew=(pNode)malloc(sizeof(Node));printf("新节点重新生成地址为%d\n",pnew);

     pnew->id=i;

     printf("%d传输成功\n",pnew->id);

     pnew->pParent=NULL;

     pnew->pLeft=NULL;

     pnew->pRight=NULL;

     np=find(root,parent);

printf("%d节点返回的地址%d\n",parent,np);

     if(np==NULL )

{

printf("bomm");return (0);

     }

       pnew->pParent=np;

  np->pLeft=pnew;

    

     printf("成功建立节点%d \n",i);

 

}  

int add2(pNode root,int parent,int i)

{    pNode np;

     pNode pnew;

     pnew=(pNode)malloc(sizeof(Node));printf("新节点重新生成地址为%d\n",pnew);

     pnew->id=i;

     printf("%d传输成功\n",pnew->id);

     pnew->pParent=NULL;

     pnew->pLeft=NULL;

     pnew->pRight=NULL;

     np=find(root,parent);

printf("%d节点返回的地址%d\n",parent,np);

     if(np==NULL )

{

  printf("bomm");return (0);

     }

      pnew->pParent=np;

np->pRight=pnew;

    

      printf("成功建立节点%d \n",i);

 return (0);

}


void browse(pNode i)

{

printf("%d ",i->id);

if (i->pLeft!=NULL) browse(i->pLeft);

if (i->pRight!=NULL) browse(i->pRight);

  

}


int main(int argc, char** argv) {

int D,n,j;

scanf("%d",&D);

pBtree pbtree;

pNode pnode;

pnode=(pNode)malloc(sizeof(Node));

pbtree=(pBtree)malloc(sizeof(Btree));

pbtree->root=pnode;

pnode->id=1;

pnode->pLeft=NULL;

pnode->pRight=NULL;

pnode->pParent=NULL;

j=pow(2,D-1);

        for(n=1;n<j;n++)

      {    

           add1(pbtree->root,n,2*n);

              add2(pbtree->root,n,2*n+1);

           }

browse(pbtree->root);


           

return 0;

}

http://img1.sycdn.imooc.com//5629e82c0001a6f402630540.jpg

正在回答

2 回答

至于关于建立树的方法的方面,也希望有大神在解决了我的问题之后相互交流一下,

0 回复 有任何疑惑可以回复我~

建树方法有误

0 回复 有任何疑惑可以回复我~
#1

qq_龙的传人_0 提问者

什么问题?
2015-10-23 回复 有任何疑惑可以回复我~
#2

qq_龙的传人_0 提问者

我只想知道为什么标号为2的节点地址找到了,但是返回了NULL;同样的程序为什么标号为3的节点也找到了,但是返回的就是节点3的地址;如果将find函数里面的第二第三if语句顺序换一下,就会发现标号为2的节点地址正常传输,标号为三的节点地址无法返回。
2015-10-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

满二叉树建立过程中的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信