它运行良好且易于解决
import java.util.*;
import java.io.*;
class Node {
Node left;
Node right;
int data;
Node(int data) {
this.data = data;
left = null;
right = null;
}
}
class Solution {
class Nodegen
{
Node node;
int gen;
public Nodegen(Node node,int gen)
{
this.node=node;
this.gen=gen;
}
}
public static void topView(Node root) {
Map<Integer,Nodegen> topview=new TreeMap<>();
new Solution().printView(root,0,0,topview);
for (Map.Entry<Integer, Nodegen> entry : topview.entrySet()) {
System.out.print(entry.getValue().node.data+" ");
}
}
public void printView(Node root,int align,int gen,Map<Integer,Nodegen> map) {
if(root==null)
{
return ;
}
if(map.get(align)==null)
{
map.put(align,new Nodegen(root,gen));
}else{
if(map.get(align).gen>gen)
{
map.put(align, new Nodegen(root,gen));
}
}
int temp=align+1;
int temp1=align-1;
int temp2=gen+1;
printView(root.left,temp1,temp2,map);
printView(root.right,temp,temp2,map);
}
public static Node insert(Node root, int data) {
if(root == null) {
return new Node(data);
} else {
Node cur;
if(data <= root.data) {
cur = insert(root.left, data);
root.left = cur;
} else {
cur = insert(root.right, data);
root.right = cur;
}
return root;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
Node root = null;
while(t-- > 0) {
int data = scan.nextInt();
root = insert(root, data);
}
scan.close();
topView(root);
}
}