首页 新闻 赞助 找找看

C语言二叉树,关于指针中有指针的问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2011-11-30 20:13

#include<stdio.h>
#include<malloc.h>


typedef struct Node
{
 int data;
 struct Node *lchild,*rchild;
}BiTree,*BiTNode;
void CreateBiTree(BiTNode* T)
{
 int ch; 
 printf("输入子节点:");
 scanf("%d",&ch);
 
 if(ch == 0)
 { 
           *T = NULL;
 }
 else 
    { 
        *T = (BiTree*)malloc(sizeof(BiTNode));
  (*T)->data = ch;
       CreateBiTree(&(*T)->lchild); 
        CreateBiTree(&(*T)->rchild); 
    } 
}

void TraverseBiTree(BiTree *T) 

    if (T != NULL ) 
 {
   printf("%d ", T->data); 
  TraverseBiTree(T->lchild); 
  TraverseBiTree(T->rchild); 
 }

void main()
{
 BiTNode T;
  CreateBiTree(&T);
 TraverseBiTree(T);
}

 

您好!该段代码为二叉树的建立赋值以及先序遍历。在void CreateBiTree(BiTNode* T)函数中,BiTNode为二叉树的指针类型别名,BiTNode* T 也就相当于 BiTree *(*T)。在此,我想询问一下,为什么要使用BiTNode* T ,而不是BiTNode T? 即 void CreateBiTree(BiTNode T),代码其余部分做相应的修改。

 

休止符L的主页 休止符L | 初学一级 | 园豆:181
提问于:2011-11-04 20:31
< >
分享
所有回答(2)
2

因为CreateBiTree函数里面涉及到分配内存操作,必须传递二级指针才能真正将实参指向分配的内存,否则只是形参指向了该块内存,而形参在函数调用结束后就清空了。

海布里的神 | 园豆:12 (初学一级) | 2011-11-05 10:58

受教育了

支持(0) 反对(0) ThinkOfLife | 园豆:200 (初学一级) | 2011-11-05 11:06

可以再详细点解说么,谢谢

支持(0) 反对(0) 休止符L | 园豆:181 (初学一级) | 2011-11-05 12:05
-1

看来这位同学要好好补补指针了,这是基础。如果不用指针则是用的BiTNode的副本,并未对原内存中的数据进行操作,而只是对其副本操作的。估计你也被我说晕了,还是多看看一些基础性原理性的书吧。

Daywei | 园豆:551 (小虾三级) | 2011-11-05 21:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册