鱼C论坛

 找回密码
 立即注册
查看: 1766|回复: 1

[已解决]递归递归

[复制链接]
发表于 2019-9-24 15:43:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void CreateBiTree(BiTree *T)
{
    char c;
    scanf("%c",&c);
    if(c==' ')
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTNode *)malloc(sizeof(BiTNode));
        (*T)->data=c;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);

    }
}
横线这两行该怎么理解啊,求大佬指点
最佳答案
2019-9-24 17:24:53
本帖最后由 jackz007 于 2019-9-24 17:32 编辑

      CreateBiTree() 函数的功能是用递归函数创建二叉树型链表:

  1.         CreateBiTree(&(*T)->lchild);  // 递归创建左子节点
  2.         CreateBiTree(&(*T)->rchild);  // 递归创建右子节点
复制代码

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct erch
  4. {
  5.    char c                    ;
  6.    int rflat                 ;
  7.    int lflat                 ;
  8.    struct erch * zuo , * you ;
  9. } A                          ;

  10. void creation(A ** x)
  11. {
  12.          char b                                ;
  13.          * x = NULL                            ;
  14.          scanf("%c" , & b)                     ;
  15.          if(b != ' ') {                          // 只要键盘输入不是空格字符,就进行新节点的创建
  16.                  printf("标志1\n")             ; // 开始创建新节点
  17.                  * x = (A *) malloc(sizeof(A)) ;
  18.                  (* x) -> c = b                ;
  19.                  (* x) -> lflat = 0            ;
  20.                  (* x) -> rflat = 0            ;
  21.                  creation(& (* x) -> zuo)      ; // 递归创建左子节点
  22.                  creation(& (* x) -> you)      ; // 递归创建右子节点
  23.          }
  24. }

  25. void show(A * p)
  26. {
  27.         if(p) {
  28.                 printf("\n")                              ;
  29.                 printf("p -> c"     = %c\n" , p -> c)     ;
  30.                 printf("p -> lflat" = %d\n" , p -> lflat) ;
  31.                 printf("p -> rflat" = %d\n" , p -> rflat) ;
  32.                 show(p -> zuo)                            ;
  33.                 show(p -> you)                            ;
  34.         }
  35. }

  36. int main(void)
  37. {
  38.         A * fp                                            ;
  39.         creation(& fp)                                    ;
  40.         show(fp)                                          ;
  41. }
复制代码


      creation() 函数在创建新节点的同时,试图利用递归分别为左、右指针创建子节点,在递归的过程中,如果遇到键盘输入是空格,则放弃新节点创建,递归到达终点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-24 17:24:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-9-24 17:32 编辑

      CreateBiTree() 函数的功能是用递归函数创建二叉树型链表:

  1.         CreateBiTree(&(*T)->lchild);  // 递归创建左子节点
  2.         CreateBiTree(&(*T)->rchild);  // 递归创建右子节点
复制代码

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct erch
  4. {
  5.    char c                    ;
  6.    int rflat                 ;
  7.    int lflat                 ;
  8.    struct erch * zuo , * you ;
  9. } A                          ;

  10. void creation(A ** x)
  11. {
  12.          char b                                ;
  13.          * x = NULL                            ;
  14.          scanf("%c" , & b)                     ;
  15.          if(b != ' ') {                          // 只要键盘输入不是空格字符,就进行新节点的创建
  16.                  printf("标志1\n")             ; // 开始创建新节点
  17.                  * x = (A *) malloc(sizeof(A)) ;
  18.                  (* x) -> c = b                ;
  19.                  (* x) -> lflat = 0            ;
  20.                  (* x) -> rflat = 0            ;
  21.                  creation(& (* x) -> zuo)      ; // 递归创建左子节点
  22.                  creation(& (* x) -> you)      ; // 递归创建右子节点
  23.          }
  24. }

  25. void show(A * p)
  26. {
  27.         if(p) {
  28.                 printf("\n")                              ;
  29.                 printf("p -> c"     = %c\n" , p -> c)     ;
  30.                 printf("p -> lflat" = %d\n" , p -> lflat) ;
  31.                 printf("p -> rflat" = %d\n" , p -> rflat) ;
  32.                 show(p -> zuo)                            ;
  33.                 show(p -> you)                            ;
  34.         }
  35. }

  36. int main(void)
  37. {
  38.         A * fp                                            ;
  39.         creation(& fp)                                    ;
  40.         show(fp)                                          ;
  41. }
复制代码


      creation() 函数在创建新节点的同时,试图利用递归分别为左、右指针创建子节点,在递归的过程中,如果遇到键盘输入是空格,则放弃新节点创建,递归到达终点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 06:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表