zoukankan      html  css  js  c++  java
  • CODE[VS] 1013 求先序排列

    题目描述 Description

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

    输入描述 Input Description

    两个字符串,分别是中序和后序(每行一个)

    输出描述 Output Description

    一个字符串,先序

    样例输入 Sample Input

    BADC

    BDCA

    样例输出 Sample Output

    ABCD

    数据范围及提示 Data Size & Hint

    这是一个很经典的题目,知道中序和后序求一个二叉树的先序遍历结果.
    那我们先简单了解一下什么是二叉树的三种遍历方式:
    先序遍历:所谓的前序遍历即从根开始遍历,然后递归遍历左树,再递归遍历右树
    中序遍历:中序遍历即先递归遍历左树,然后遍历根,然后遍历右树
    后序遍历:先递归遍历左树,然后再递归遍历右树,最后遍历根.
    拿从网上找的一个图作为一个例子:


    针对这个图有先序遍历:ABCDEFGHK
    中序遍历为:BDCAEHGKF
    后序遍历为:DCBHKGFEA

    那么我们可以根据定义知道,后序遍历的最后一个字符就是这棵二叉树的根,然后由根就可以在中序遍历中找到根的位置,根左边就是左树,根右边就是右树,找到根的位置我们也可以在后序遍历中分开左树和右树,之后进行递归查找打印就可以,直接上代码:

    /*************************************************************************
        > File Name: 求先序数列.c
        > Author: zhanghaoran
        > Mail: 467908670@qq.com
        > Created Time: 2015年06月08日 星期一 22时21分39秒
     ************************************************************************/
    
    #include <stdio.h>
    #include <string.h>
    
    int tree(char *mid, char *last){
    	char t, *p, *q;
    	if(!*mid)
    		return 0;
    	p = last + strlen(last) - 1;
    	printf("%c",*p);
    	q = strchr(mid, *p);
    	*p = 0;
    	p = q - mid + last;
    	t = *p;
    	*p = 0;
    	*q = 0;
    	tree(mid, last);
    	*p = t;
    	tree(q + 1, p);
    }
    
    int main(void){
    	char mid[100010];
    	char last[100010];
    	scanf("%s", mid);
    	scanf("%s", last);
    	tree(mid, last);
    	printf("
    ");
    	return 0;
    }
    其中函数strchr是返回一个字符串中的第一个与所给字符相等的字符的指针.


  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/chilumanxi/p/5136134.html
Copyright © 2011-2022 走看看