import java.io.*;
import java.util.*;
class Node {
int val;
Node left;
Node right;
public Node(int val) {
this.val = val;
}
}
public class Main {
static Integer[] inorder;
static Integer[] postorder;
public static List<Integer> findminpath(Node root) {
if(root.left == null && root.right == null) {
List<Integer> res= new ArrayList<Integer>();
res.add(root.val);
return res;
}
else if(root.left != null && root.right != null) {
List<Integer> l = findminpath(root.left);
List<Integer> r = findminpath(root.right);
int sum1 = 0, sum2 = 0;
for(Integer i: l) sum1 += i;
for(Integer i: r) sum2 += i;
if(sum1 < sum2) {l.add(root.val); return l;}
else {r.add(root.val); return r;}
}
else if(root.left == null && root.right != null) {
List<Integer> r = findminpath(root.right);
r.add(root.val);
return r;
}
else {
List<Integer> l = findminpath(root.left);
l.add(root.val);
return l;
}
}
public static Node createTree(int istart, int pstart, int length) {
if(length < 1) return null;
int value = postorder[pstart + length - 1];
Node root = new Node(value);
int i;
for(i = istart; i < istart + length; i++)
if(inorder[i] == value) break;
root.left = createTree(istart, pstart, i - istart);
root.right = createTree(i + 1, pstart + i - istart, length - i + istart - 1);
return root;
}
public static void transerval(Node rt) {
if(rt == null) return;
System.out.print(rt.val+ " ");
transerval(rt.left);
transerval(rt.right);
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNextLine()) {
String tmp = cin.nextLine();
String[] in = tmp.split(" ");
tmp = cin.nextLine();
String[] post = tmp.split(" ");
int n = in.length;
inorder = new Integer[n];
postorder = new Integer[n];
for(int i = 0; i < n; i++) {
inorder[i] = Integer.parseInt(in[i]);
postorder[i] = Integer.parseInt(post[i]);
}
Node root = createTree(0, 0, n);
List<Integer> result = findminpath(root);
System.out.println(result.get(0));
}
}
}
UVa 548 Tree
最新推荐文章于 2020-09-30 22:43:43 发布