给定一个先序遍历与中序遍历的二叉树,要求求出该二叉树的后序遍历表示形式。对于如下二叉树:
其先序遍历为:GDAFEMHZ
其中序遍历为:ADEFGHMZ
当给定先序遍历与中序遍历时,该二叉树就被唯一的确定下来,这时即可求出二叉树的后序表示为:AEFDHZMG。
给定输入中,二叉树中的字符有且仅有一个,且二叉树中的所有节点互不相同
输入:
两行,第一行为二叉树的先序遍历表示,第二行为二叉树的中序遍历表示
输出:
一行,二叉树的后续遍历表示
给定一个先序遍历与中序遍历的二叉树,要求求出该二叉树的后序遍历表示形式。对于如下二叉树:
其先序遍历为:GDAFEMHZ
其中序遍历为:ADEFGHMZ
当给定先序遍历与中序遍历时,该二叉树就被唯一的确定下来,这时即可求出二叉树的后序表示为:AEFDHZMG。
给定输入中,二叉树中的字符有且仅有一个,且二叉树中的所有节点互不相同
输入:
两行,第一行为二叉树的先序遍历表示,第二行为二叉树的中序遍历表示
输出:
一行,二叉树的后续遍历表示
"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;
}
}