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

来源:互联网 发布:狩猎者安全防护软件 编辑:程序博客网 时间:2024/06/05 06:50

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

复制代码
 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  -->pre29 *    F G E  -->mid30 *    F G E  -->end31 但是对于以下情况不可输出 32      E G F33      E F G34      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 }
复制代码