zoukankan      html  css  js  c++  java
  • 二叉树算法:中序、后序推导先序(数组递归实现 【*模板】)

    中根序列和后根序列重建二叉树

    描述

    我们知道如何按照三种深度优先次序来周游一棵二叉树,来得到中根序列、前根序列和后根序列。反过来,如果给定二叉树的中根序列和后根序 列,或者给定中根序列和前根序列,可以重建一二叉树。本题输入一棵二叉树的中根序列和后根序列,要求在内存中重建二叉树,最后输出这棵二叉树的前根序列。

    用不同的整数来唯一标识二叉树的每一个结点,下面的二叉树

    中根序列是9 5 32 67

    后根序列9 32 67 5

    前根序列5 9 67 32

    先读入一个数n代表中序和后序均有n个元素。

    接着输入中序序列,在输入后序序列。

    输出先序序列。

    输入:

    4

    9 5 32 67

    9 32 67 5

    输出:

    5 9 67 32

    #include <stdio.h>
    #include <string.h>
    
    void build(int len, int *s1, int *s2, int *s)
    {
        int p;
        int i;
        if(len<=0)
            return;
        else{
            for(i=0; i<len; i++){
                if(s1[i]==s2[len-1]){
                    p = i;
                }
            }
            build(p, s1, s2, s+1);
            build(len-p-1, s1+p+1, s2+p, s+p+1);
            s[0] = s2[len-1];
        }
    }
    
    int main()
    {
        int i;
    
        int s1[1000], s2[1000], s3[1000];
        int n;
        while(scanf("%d", &n)!=EOF)
        {
            for(i=0; i<n; i++){
                scanf("%d", &s1[i] );
            }
            for(i=0; i<n; i++){
                scanf("%d", &s2[i] );
            }
            build(n, s1, s2, s3 );
    
            for(i=0; i<n; i++){
                printf("%d%c", s3[i], i==n-1?'
    ':' ' );
            }
        }
        return 0;
    }
    
  • 相关阅读:
    MySQL GTID复制Slave跳过错误事务Id以及复制排错问题总结
    Git基础命令整理
    原创-公司项目部署交付环境预检查shell脚本
    解决SecureCRT超时自动断开的问题
    Linux设置显示中文和设置字体
    高等代数4 线性方程组
    高等代数3 行列式
    高等代数2 向量组
    高等代数1 矩阵
    离散数学4 组合数学
  • 原文地址:https://www.cnblogs.com/yspworld/p/4460986.html
Copyright © 2011-2022 走看看