题目链接 点击打开链接
题目1201:二叉排序树import java.io.*;
import java.util.*;
public class Main{
public static void main(String []args){
Scanner cin = new Scanner(new InputStreamReader(System.in)) ;
PrintWriter cout = new PrintWriter(System.out) ;
while(cin.hasNext()){
new Task1(cin.nextInt()).solve(cin, cout);
}
cout.flush();
cout.close();
}
}
class Node{
int val ;
Node left , right ;
Node(int val){
this.val = val ;
left = right = null ;
}
Node(){
left = right = null ;
}
}
class Task1{
PrintWriter cout ;
int n ;
public Task1(int n){
this.n = n ;
}
void solve(Scanner cin , PrintWriter cout){
this.cout = cout ;
Node root = new Node(-100) ;
for(int i = 1 ; i<= n ;i++){
insert(root , cin.nextInt()) ;
}
preOrder(root) ;
cout.println();
inOrder(root) ;
cout.println();
postOrder(root) ;
cout.println();
cout.flush();
}
//在以p节点为根的二叉树中插入节点后,新的二叉树的根节点还是p,每次插入的节点都是叶子节点
void insert( Node p , int key){
if( p.val == -100){
//p = new Node(key) ; // 这里有java 与c++ 不同的地方,
//核心卷I P123页,一个方法不能让 对象参数 引用一个新的对象,(引用后并不改变实参root,不能达到所想要的目的)
p.val = key ;
return ;
}
if(key < p.val) {
if (p.left == null){
p.left = new Node(key) ;
}
else{
insert(p.left , key) ;
}
}
else if(key > p.val) {
if(p.right == null){
p.right = new Node(key) ;
}
else
insert(p.right , key) ;
}
}
// 前序递归遍历
void preOrder(Node p){
if(p != null){
cout.print(p.val + " ") ;
preOrder(p.left) ;
preOrder(p.right) ;
}
}
//中序递归遍历二叉树
void inOrder(Node p){
if(p!= null){
inOrder(p.left) ;
cout.print(p.val + " ") ;
inOrder(p.right) ;
}
}
//后序递归遍历
void postOrder(Node p){
if(p != null){
postOrder(p.left) ;
postOrder(p.right) ;
cout.print(p.val + " ") ;
}
}
}