<>递归

一个盒子,里面放更多的同样的盒子;
栈可以实现递归;
递归返回,入,出;
二叉树链表的建立,深度查询均利用递归;

 void CreateBiTree(BiTree *T)
 {
   TElemType ch;
 #ifdef CHAR
   scanf("%c",&ch);
 #endif
 #ifdef INT
   scanf("%d",&ch);
 #endif
   if(ch==Nil) /* 空 */
     *T=NULL;
   else
   {
     *T=(BiTree)malloc(sizeof(BiTNode));
     if(!*T)
       exit(OVERFLOW);
     (*T)->data=ch; /* 生成根结点 */
     CreateBiTree(&(*T)->lchild); /* 构造左子树 */ CreateBiTree(&(*T)->rchild); /* 构造右子树 */ } }
int BiTreeDepth(BiTree T)
 { /* 初始条件: 二叉树T存在。操作结果: 返回T的深度 */
   int i,j;
   if(!T)
     return 0;
   if(T->lchild)
     i=BiTreeDepth(T->lchild);
   else
     i=0;
   if(T->rchild)
     j=BiTreeDepth(T->rchild);
   else
     j=0;
   return i>j?i+1:j+1;
 }

第一次发现,指针可以作为参数传递这个是我以前就知道的.但是如果没有给指针赋值的时候,也可以当作一个参数吗?

大家都知道只有实例化对象才会分配内存空间。 例如结构体student本身没有分配空间,student a 就分配空间了。指针是有空间的,但是它指向的空间,并没有说明,也就不存在。
当这个指针传递指针名给一个函数后,它传递的是什么呢?首先,没有地址,也就不存在传地址。那它就只传递一个名字吗?等其他 函数里面动态分配空间后,把空间地址给它,也就是说,它还是传递的一个地址呀。它传递的是指针本身的地址。
其实,想清楚就简单了,我开始混合了指针变量地址,和指针变量值的关系。地址传递,肯定都是传递的变量的地址。值传递才是变量的值。这里依然是传递的地址。

你可能感兴趣的:(<>递归)