首页 > 其他分享 >构造二叉树并输出层次遍历序列

构造二叉树并输出层次遍历序列

时间:2022-09-19 17:26:06浏览次数:99  
标签:char inOrderArray 遍历 TreeNode baOrderArray 二叉树 序列

题目

给定两个字符串,分别是二叉树的后序遍历和中序遍历,打印二叉树的层次遍历序列.

思路

代码

import java.util.*;

public class Main3 {
    
    private static Map<Character, Integer> inOrderChar2Index;


    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        String baOrder = in.next();
        String inOrder = in.next();

        char[] baOrderArray = baOrder.toCharArray();
        char[] inOrderArray = inOrder.toCharArray();

        initInOrderChar2Index(inOrderArray);

        TreeNode tree = buildTree(baOrderArray, 0, baOrderArray.length - 1,
                inOrderArray, 0, inOrderArray.length - 1);


        StringBuilder result = new StringBuilder();
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(tree);

        while (!queue.isEmpty()){
            TreeNode node = queue.poll();
            if (node == null){
                continue;
            }
            result.append(node.val);
            queue.offer(node.left);
            queue.offer(node.right);
        }

        System.out.println(result.toString());
    }

    private static void initInOrderChar2Index(char[] inOrderArray) {
        inOrderChar2Index = new HashMap<>();
        for (int i = 0; i < inOrderArray.length; i++) {
            inOrderChar2Index.put(inOrderArray[i], i);
        }
    }

    private static TreeNode buildTree(char[] baOrderArray, int baStart, int baEnd, 
                                      char[] inOrderArray, int inStart, int inEnd) {
        if (baStart > baEnd){
            return null;
        }

        TreeNode treeNode = new TreeNode(baOrderArray[baEnd]);;

        Integer inOrderIndex = inOrderChar2Index.get(baOrderArray[baEnd]);

        int leftTreeLength = inOrderIndex - inStart;

        treeNode.left = buildTree(baOrderArray, baStart, baStart + leftTreeLength - 1,
                inOrderArray, inStart, inOrderIndex - 1);

        treeNode.right = buildTree(baOrderArray, baStart + leftTreeLength, baEnd - 1,
                inOrderArray, inOrderIndex + 1, inEnd);

        return treeNode;
    }
}

class TreeNode{
    char val;
    TreeNode left;
    TreeNode right;

    public TreeNode(char val) {
        this.val = val;
    }
}

标签:char,inOrderArray,遍历,TreeNode,baOrderArray,二叉树,序列
From: https://www.cnblogs.com/cgengwei/p/16708321.html

相关文章

  • MySQL生成数字序列/日期序列
    1.MySQL5.7基于自定义变量的方式生成1-10的连续数字序列:SELECT@v:=@v+1ASnFROM(SELECT1UNIONSELECT2)t1,(SELECT1UNIONSELECT2UNIONSELECT3UN......
  • 2415. 在 JavaScript 中反转二叉树的奇数层
    2415.在JavaScript中反转二叉树的奇数层鉴于根一个完美的二叉树,反转每个节点的值奇怪的树的层次。例如,假设第3层的节点值为[2,1,3,4,7,11,29,18],那么它应......
  • leetcode 2415.反转二叉树的奇数层
    leetcode2415.反转二叉树的奇数层题目描述给你一棵完美二叉树的根节点root,请你反转这棵树中每个奇数层的节点值。例如,假设第3层的节点值是[2,1,3,4,7,11,29,1......
  • 2022ICPC网络赛 L LCS-like Problem(DP 子序列自动机)
    LLCS-likeProblem(DP子序列自动机)题目:​ 给出两个串s,t。请找出一个最长的子序列\(s'\),使其与\(t\)的最长公共子序列长度不大于1。输出这个最长的长度。思路:​ 题目......
  • CVE-2017-12149 JBoss JMXInvokerServlet 反序列化漏洞
    一、漏洞概述     2017年8月30日,厂商Redhat发布了一个JBOSSAS5.x的反序列化远程代码执行漏洞通告。该漏洞位于JBoss的HttpInvoker组件中的ReadOnlyAccessFil......
  • 使用 Temporal Fusion Transformer 进行时间序列预测
    目前来看表格类的数据的处理还是树型的结构占据了主导地位。但是在时间序列预测中,深度学习神经网络是有可能超越传统技术的。为什么需要更加现代的时间序列模型?专为单个......
  • JAVA 遍历数组,找出数组中的最大值
    publicclasstest1{publicstaticvoidmain(String[]args){int[]arr={99,25,34,48,63,78,101,71,12};intmax=arr[0];for(inti=......
  • 二叉树的遍历
    前序遍历(先序遍历):先访问根,再左子树,再右子树中序遍历:先访问左子树,再访问根,再右子树后序遍历:先左子树,再右子树,最后访问根......
  • Java 序列化
    Java序列化当一个对象需要持久化(存储)或者传输的时候,就用到了序列化。对象可以转换成字节序列,该字节序列包括这个对象的数据和类型信息也包括存储在对象中数据的类型。将......
  • json数据转成list后遍历报错
    错误代码:JSONObjectjsonObject=JSONUtil.parseObj(production);Map<String,Object>resultMap=newHashMap<>();resultMap.put("count",jsonObject.get("count"))......