注册 登录
编程论坛 数据结构与算法

二叉树建立的问题!

王一南 发布于 2011-05-17 13:12, 634 次点击

二叉树的建立,书上是这么给的,么返回值,我想要返回值,行吗?
typedef struct BiTNode
{
   char data;
   struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreatBiTree(BiTree *T)
{
  char ch;
  getchar()
  if(ch=='#')
    *T=NULL;
  else
  {
        *T=(BiTree)malloc(sizeof(BiTNode)) ;
        *T->data=ch;
        CreatBiTree(&((*T)->lchild));
        CreatBiTree(&((*T)->rchild));
   }
}

我是这么写的,不知道行不?这个返回值行吗?
typedef struct BiTNode
{
   char data;
   struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreatBiTree(BiTree root)
{
  Bitree p;
  p=root;
  char ch;
  getchar()
  if(ch=='#')
    *T=NULL;
  else
  {
       p=(BiTree)malloc(sizeof(BiTNode)) ;
       p->data=ch;
        CreatBiTree(p->lchild);
        CreatBiTree(p->rchild);
        return(root);
   }

}
7 回复
#2
王一南2011-05-17 16:15
烦劳各位高手了
#3
三月的雪2011-05-17 16:31
可以,但是有返回值那个create函数不应该声明成void。
请看下我的帖子https://bbs.bccn.net/thread-339502-1-1.html
#4
寒风中的细雨2011-05-17 19:22
向楼上看
#5
王一南2011-05-19 10:10
回复 3楼 三月的雪
那那个返回值return 是放在那个大括号里,还是放在小括号了呢?
  如果放在小括号里
 else
  {
       p=(BiTree)malloc(sizeof(BiTNode)) ;
       p->data=ch;
        CreatBiTree(p->lchild);
        CreatBiTree(p->rchild);
        return(root);
   }

我感觉我不是很明白是怎么递归的,每次递归的返回值是什么呢?
  麻烦您了
#6
王一南2011-05-19 10:12
回复 3楼 三月的雪
BiTreeNode *createBiTree()
  你这个定义函数为什么么有参数呢?
 如果这样定义可以吗?
BiTreeNode *createBiTree(Bitree root)
 麻烦您了

#7
三月的雪2011-05-22 16:08
回复 6楼 王一南
这种带返回参数的情况传入参数可以带,但是没有任何用处,所以还是去掉吧。另外每次递归返回的是当前子树根节点的地址,是个一级指针。
#8
wengpingzhan2011-06-19 14:53
typedef struct BiTNode
{
   char data;
   struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTree CreatBiTree()
{
  Bitree p;
  char ch;
  getchar();
  if(ch=='#')
    return NULL;
  else
  {
       p=(BiTree)malloc(sizeof(BiTNode)) ;
       p->data=ch;
        p->lchild = CreatBiTree();
        p->rchild = CreatBiTree();
        return(p);
   }
}

这样应该没啥问题了!
1