import java.io.*;
/*
二叉树的列表表示(链表表示)
建立二叉树的规则:大于父节点的放在右子节点,小于父节点的放在左子节点
中序遍历(左根右)输出即从小到大输出
*/
//二叉树的节点
class TreeNode{
int value;
TreeNode leftNode;
TreeNode rightNode;
public TreeNode(int value){
this.value = value;
this.leftNode = null;
this.rightNode = null;
}
}
//二叉树类
class BTree{
public TreeNode rootNode;
public BTree(int[] data){
for(int i = 0; i < data.length; ++i){
addTreeNode(data[i]);
}
}
public void addTreeNode(int value){
TreeNode currentNode = rootNode;
if(rootNode == null){
rootNode = new TreeNode(value);
return;
}
while(true){
if(value < currentNode.value){//左子树
if(currentNode.leftNode == null){
currentNode.leftNode = new TreeNode(value);
return;
}else{//如果左子树不为空,则当前节点移到左子树
currentNode = currentNode.leftNode;
}
}else{//右子树
if(currentNode.rightNode == null){
currentNode.rightNode = new TreeNode(value);
return;
}else{//如果右子树不为空,则当前节点移到右子树
currentNode = currentNode.rightNode;
}
}
}
}
//前序遍历
public void preOrder(TreeNode node){
if(node != null){
System.out.print("[" + node.value + "] ");
preOrder(node.leftNode);
preOrder(node.rightNode);
}
}
//中序遍历
public void inOrder(TreeNode node){
if(node != null){
inOrder(node.leftNode);
System.out.print("[" + node.value + "] ");
inOrder(node.rightNode);
}
}
//后序遍历
public void postOrder(TreeNode node){
if(node != null){
postOrder(node.leftNode);
postOrder(node.rightNode);
System.out.print("[" + node.value + "] ");
}
}
}
public class BinaryTree{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.print("请输入节点数:");
int n = Integer.parseInt(br.readLine());
int[] data = new int[n];
for(int i = 0; i < n; ++i){
System.out.print("请输入第" + (i + 1) + "个数值:");
data[i] = Integer.parseInt(br.readLine());
}
BTree bt = new BTree(data);
//前序遍历
System.out.print("前序遍历:");
bt.preOrder(bt.rootNode);
System.out.println();
//中序遍历
System.out.print("中序遍历:");
bt.inOrder(bt.rootNode);
System.out.println();
//后序遍历
System.out.print("后序遍历:");
bt.postOrder(bt.rootNode);
System.out.println();
}catch(IOException e){
e.printStackTrace();
}
}
}
输出实例: