zoukankan      html  css  js  c++  java
  • 笔试-2020年西山居Java笔试题(补上,一直忘记补上了)

    2020年西山居Java笔试题

    当初参加西山居时候第一道算法题,一直想做来着,给耽误了,补上

    给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列。

    输入描述:
    输入为一行。
    两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔。保证数据合法
    
    输出描述:
    对应输出后序遍历序列
    

    示例1

    输入

    ABDEC DBEAC
    

    输出

    DEBCA
    思路:先根据先序、中序序列建立二叉树,然后后序遍历
    
    package 杂题汇总;
    
    import java.util.Scanner;
    
    /**
     * @author :Empirefree
     * @description:TODO
     * @date :2021/1/19 10:25
     */
    public class PreAndMid {
        public static class TreeNode {
            char val;
            TreeNode left;
            TreeNode right;
            TreeNode(char x) { val = x; }
        }
        /*
        * 2020年西山居Java笔试题--先序中序构建二叉树并求后序
        *
        * Case:ABDEC DBEAC   输出:DEBCA
         * */
        //TODO:数组传递,类传递
        //TODO:static final
    
        public static TreeNode createTreeNode(char[] preChar, int preStart, int preEnd, char[] midChar, int midStart, int midEnd){
            if (preStart >= preEnd || midStart >= midEnd) return null;
            TreeNode rootNode = new TreeNode(preChar[preStart]);
    
            for (int i = midStart; i < midEnd; i++) {
                if (preChar[preStart] == midChar[i]){
                    int midPreLen = i - midStart;
                    rootNode.left = createTreeNode(preChar, preStart + 1, preStart + 1 + midPreLen, midChar, midStart, i);
                    rootNode.right = createTreeNode(preChar, preStart + 1 + midPreLen, preEnd, midChar, i + 1, midEnd);
                }
            }
            return rootNode;
        }
    
        public static void postTravel(TreeNode rootTree){
            if (rootTree != null){
                postTravel(rootTree.left);
                postTravel(rootTree.right);
                System.out.print(rootTree.val);
            }
        }
        public static void main(String[] args) {
            //1、数据输入
            final Scanner scanner = new Scanner(System.in);
            char[] preChar = scanner.nextLine().toCharArray();
            char[] midChar = scanner.nextLine().toCharArray();
    
            //2、构建二叉树
            TreeNode rootTree = createTreeNode(preChar, 0, preChar.length, midChar, 0, midChar.length);
            //3、后序输出
            postTravel(rootTree);
        }
    }
    
    
    
    

    我曾七次鄙视自己的灵魂:
    第一次,当它本可进取时,却故作谦卑;
    第二次,当它在空虚时,用爱欲来填充;
    第三次,在困难和容易之间,它选择了容易;
    第四次,它犯了错,却借由别人也会犯错来宽慰自己;
    第五次,它自由软弱,却把它认为是生命的坚韧;
    第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
    第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
  • 相关阅读:
    VS2010程序打包
    Extjs布局
    Extjs4.x完美treepanel checkbox无限级选中与取消
    extjs 4.2 日期控件 选择时分秒功能
    extjs4.0下的日期控件的星期显示为y的解决办法
    linux下mysql 配置
    坐标轴笔记
    cpp 内嵌函数(lambda,struct)
    ue4 笔记
    ue4 蓝图方法备份
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/14297190.html
Copyright © 2011-2022 走看看