首页 > 试题广场 >

二叉树的后序遍历

[编程题]二叉树的后序遍历
  • 热度指数:325 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

给定一个先序遍历与中序遍历的二叉树,要求求出该二叉树的后序遍历表示形式。对于如下二叉树:

 

其先序遍历为:GDAFEMHZ

其中序遍历为:ADEFGHMZ

当给定先序遍历与中序遍历时,该二叉树就被唯一的确定下来,这时即可求出二叉树的后序表示为:AEFDHZMG。

给定输入中,二叉树中的字符有且仅有一个,且二叉树中的所有节点互不相同

输入:

两行,第一行为二叉树的先序遍历表示,第二行为二叉树的中序遍历表示

输出:

一行,二叉树的后续遍历表示

示例1

输入

"GDAFEMHZ","ADEFGHMZ"

输出

"AEFDHZMG"
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param preStr string字符串 
     * @param midStr string字符串 
     * @return string字符串
     */
    StringBuilder str = new StringBuilder();
    public String binaryTree (String preStr, String midStr) {
        char[] pre = preStr.toCharArray();
        char[] mid = midStr.toCharArray();
        postTree(pre,mid);
        return str.toString();
    }
    public void postTree(char[] preStr , char[] midStr){
        if(preStr.length == 1) {
            str.append(preStr[0]);
            return;
        }
        int n = findNode(preStr[0],midStr);
        if(n!=1){
            char[] preleft = Arrays.copyOfRange(preStr,1,n);
            char[] midleft = Arrays.copyOfRange(midStr,0,n-1);
            postTree(preleft,midleft);
        }
        if(n != preStr.length){
            char[] preright = Arrays.copyOfRange(preStr,n,preStr.length);
            char[] midright = Arrays.copyOfRange(midStr,n,midStr.length);
            postTree(preright,midright);
        }
        str.append(preStr[0]);
        
    }
    
    public int findNode(char ch,char[] midStr){
        int n = 0;
        for(int i = 0 ; i<midStr.length ; ++i){
            if(midStr[i] == ch){
                n = i;
            }
        }
        return n+1;
    }
}

发表于 2021-08-17 15:33:10 回复(0)