免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7357 | 回复: 8
打印 上一主题 下一主题

如何通过递归获取一个多叉树中的各个叶子结点,并将其存储到一个链表中 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-23 16:43 |只看该作者 |倒序浏览
如何通过递归获取一个多叉树中的各个叶子结点,并将其存储到一个链表中


这个问题今天试了好久,思路也没理清,要是递归的话,每当返回上一个层时就会把前一个子树的相关信息给覆盖掉了。

求各位大侠帮忙。
谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-11-23 17:37 |只看该作者
我试了一个,通过一个指针数据,并结合一个static 下标好像可以实现。
不知道各位大侠有其它的想法没!

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
3 [报告]
发表于 2011-11-24 10:04 |只看该作者
作業題?

要好好做作業哦!

论坛徽章:
0
4 [报告]
发表于 2011-11-24 10:18 |只看该作者
课上没教树的遍历么?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2011-11-24 14:42 |只看该作者
本帖最后由 cjaizss 于 2011-11-24 15:04 编辑
如何通过递归获取一个多叉树中的各个叶子结点,并将其存储到一个链表中


这个问题今天试了好久,思路也 ...
firecityplans 发表于 2011-11-23 16:43



    既然是递归,代码量就少了.

  1.    #include <stdio.h>
  2.         #include <stdlib.h>
  3.    typedef struct _tree_node_t {
  4.             int data;
  5.             struct _tree_node_t* son[10];
  6.     }tree_node_t ;
  7.     typedef struct _list_node_t {
  8.              int date;
  9.              struct _list_node_t  *next;
  10.      } list_node_t;         
  11.     list_node_t* create_list(tree_node_t  *tree) {
  12.             list_node_t *ret,*tmp;
  13.             int i;
  14.             if(tree == NULL)return NULL;
  15.             ret = (list_node_t*)malloc(sizeof(list_node_t));
  16.             if(ret == NULL)return NULL;
  17.             ret->data = tree->data;
  18.             tmp = ret;
  19.             //ret->next=NULL;
  20.             for(i=0;i<10;i++) {
  21.                 tmp->next =  create_list(tree->son[i]);
  22.                 if(tmp->next != NULL)
  23.                          tmp = tmp->next;
  24.             }
  25.             return ret;
  26.     }
  27.    
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-11-24 14:57 |只看该作者
回复 1# firecityplans


    深度优先遍历

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2011-11-24 15:01 |只看该作者
本帖最后由 cjaizss 于 2011-11-24 15:03 编辑
既然是递归,代码量就少了.
cjaizss 发表于 2011-11-24 14:42



    哦,叶子.........

  1.         #include <stdio.h>
  2.         #include <stdlib.h>
  3.    typedef struct _tree_node_t {
  4.             int data;
  5.             struct _tree_node_t* son[10];
  6.     }tree_node_t ;
  7.     typedef struct _list_node_t {
  8.              int date;
  9.              struct _list_node_t  *next;
  10.      } list_node_t;         
  11.     list_node_t* create_list(tree_node_t  *tree) {
  12.             list_node_t *ret,*tmp;
  13.             int i;
  14.             if(tree == NULL)return NULL;
  15.             
  16.             for(i=0,ret=NULL;i<10;i++) {
  17.                 if(tree->son[i]!=NULL) {
  18.                           if(ret == NULL)
  19.                                 tmp = ret =  create_list(tree->son[i]);
  20.                           else
  21.                                 tmp->next =  create_list(tree->son[i]);
  22.                 }
  23.             }
  24.             if(ret == NULL) {
  25.                  ret = (list_node_t*)malloc(sizeof(list_node_t));
  26.                  if(ret!=NULL) {
  27.                        ret->next = NULL;
  28.                        ret->data = tree->data;
  29.                  }
  30.             }
  31.            return ret;
  32.     }
  33.    
  34.      
复制代码

论坛徽章:
0
8 [报告]
发表于 2011-11-24 22:27 |只看该作者
哦,叶子.........
cjaizss 发表于 2011-11-24 15:01



    大侠考虑到一个子树结点可能包含多个叶子结点和多个子树结点没?我看你的程序里好像只有子树数组,没有叶子结点数组。比如一个树包含四个叶子10个子树。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2011-11-24 23:07 |只看该作者
大侠考虑到一个子树结点可能包含多个叶子结点和多个子树结点没?我看你的程序里好像只有子树数组 ...
firecityplans 发表于 2011-11-24 22:27



    我这种表示方法,叶子就是没有子节点的节点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP