zoukankan      html  css  js  c++  java
  • hihoCoder 1049 后序遍历 最详细的解题报告

    题目来源:后序遍历

    解题思路:开始时我只知道先通过先序、中序求出二叉树,然后再后序遍历二叉树,这当然也是一种解题思路,但是会做一些无用功,比如:计算二叉树。其实,可以直接通过先序序列和中序序列直接求出后序序列的。思路如下:

    1、取先序序列的第一个节点为根节点;

    2、在中序序列中找到根节点的下标,将中序序列分成left和right两部分;

    3、根据left和right的长度计算出先序序列中的根节点的左右孩子;

    4、依次递归计算出左孩子,右孩子,返回 左孩子+右孩子+根节点。

    具体算法(Java版,直接AC)

     1 import java.util.Scanner;
     2 
     3 public class Main {
     4 
     5     public static String post_order(String preOrder,String inOrder){
     6         if(preOrder.length()>0&&preOrder.length()==inOrder.length()){
     7             char root=preOrder.charAt(0); //获取根节点
     8             int index=inOrder.indexOf(root); //在中序序列中找出根节点的下标
     9             if(index!=-1){
    10                 String left=inOrder.substring(0, index);//中序序列中左孩子串
    11                 String right=inOrder.substring(index+1);//中序序列中右孩子串
    12                 //递归计算并返回计算后的左孩子+右孩子+根节点
    13                 return post_order(preOrder.substring(1, left.length()+1),left)
    +post_order(preOrder.substring(left.length()+1),right)
    +root; 14 } 15 } 16 return ""; 17 } 18 19 public static void main(String[] args) { 20 Scanner scanner=new Scanner(System.in); 21 System.out.println(post_order(scanner.next(),scanner.next())); 22 } 23 }
  • 相关阅读:
    【原】webpack--loaders,主要解释为什么需要loaders和注意事项
    【原】通过npm script运行webpack的原理
    原生js深拷贝函数
    git add 添加错文件的撤销方法
    item2 快捷键
    sudo su 和sudo -s的区别
    nvm常用命令
    【雅思】【口语】Describe a product you bought and felt happy
    【雅思】【口语】Help others
    【雅思】【口语】
  • 原文地址:https://www.cnblogs.com/pinxiong/p/4077900.html
Copyright © 2011-2022 走看看