二叉树遍历方式之间的关系(递归)

已知三种序列中任意两种(前序和后序这一组合除外),均可递归求出另一序列唯一解。今天下午的成果,主要是复习一下递归思想

复制代码
 1 /** 已知二叉树前序和中序序列  输出后序序列 
 2  pre前序序列  in中序序列 end后序序列 
 3 */ 
 4 void pre_in(int length, char *pre, char *in, char *end)
 5 {
 6      int p;
 7      if(length<=0)     return;
 8      p=strchr(in,pre[0])-in; //获取前序第一个字符在中序序列中的位置 
 9      pre_in(p, pre+1, in, end);//递归左子树 
10      pre_in(length-p-1, pre+p+1, in+p+1, end+p);//递归右子树 
11      end[length - 1] = pre[0];// 把根节点放在最后 
12 }
13 /** 已知二叉树后序和中序序列  输出后序序列 
14  pre前序序列  in中序序列 end后序序列 
15 */ 
16 void in_end(int length, char *in, char *end, char *pre)
17 {
18      if(length<=0)return;
19      int p=strchr(in,end[length-1])-in;
20      in_end(p, in, end, pre+1);
21      in_end(length-1-p, in+p+1, end+p, pre+p+1);
22      pre[0]=end[length-1];//把根节点放在首要位置 
23      }
24 /**已知二叉树后序和中序序列  输出后序序列 
25 **pre前序序列  in中序序列 end后序序列 
26 问题:前序和后序不能唯一确定中序序列
27 *此可以求出对应的度数部位不为0的左子树不为空的中序序列
28 *如:E G F  -->pre
29 *    F G E  -->mid
30 *    F G E  -->end
31 但是对于以下情况不可输出 
32      E G F
33      E F G
34      F G E 
35 */    
36 void pre_end(int length, char *pre, char *end, char *in)
37 {
38      if(length<=0)return;
39      if(length==1){
40                    in[0]=pre[0];return;
41                    }
42      int p= strchr(end,pre[1])-end; 
43      pre_end(p+1, pre+1, end, in);
44      pre_end(length-(p+1)-1, pre+p+2, end+p+1, in+p+1);
45      in[p+1]=pre[0];//根节点放在中间位置 
46 }
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值