上篇贴出了二叉树的C语言代码实现,这篇贴出Java代码实现。
public class BinaryTree{
private class Node{
public int e;
public Node left;
public Node right;
public Node(int e){
this.e = e;
this.left = null;
this.right = null;
}
public Node(){
this(0);
}
}
private Node root; //二叉树的根节点
public BinaryTree(){
root = new Node();
}
/**
* 初始化二叉树,创建根节点
* 这里为了方便起见,假设输入的节点只能是大于0的数,小于等于0都视作空树
*
* @return
*/
public Node initBinaryTree(){
int val;
System.out.println("请输入根节点:");
Scanner scanner = new Scanner(System.in);
val = scanner.nextInt();
if(val <= 0){
System.out.println("该树为空树");
System.exit(0);
}
root.e = val;
root.left = null;
root.right = null;
return root;
}
/**
* 创建二叉树
* 这里为了方便起见,假设输入的节点只能是大于0的数,小于等于0都视作无效
* 如果一个节点的左子节点输入的值为小于0的数,则该节点没有左子节点,返回
* 如果一个节点的右子节点输入的值为小于0的数,则该节点没有右子节点,返回
* @param n
*/
public void createTree(Node n){
int val;
System.out.println(MessageFormat.format("请输入{0}的左子节点",n.e));
Scanner scanner = new Scanner(System.in);
val = scanner.nextInt();
if(val <= 0)
return;
if(val >0){
Node node = new Node(val);
n.left = node;
createTree(n.left);
}
System.out.println(MessageFormat.format("请输入{0}的右子节点",n.e));
Scanner sn = new Scanner(System.in);
val =sn.nextInt();
if(val >0){
Node node = new Node(val);
n.right = node;
createTree(n.right);
}
}
public void createTree(){
createTree(initBinaryTree());
}
/**
* 二叉树的前序遍历
* @param node
*/
private void preOrder(Node node){
if(node == null)
return;
System.out.print(node.e);
preOrder(node.left);
preOrder(node.right);
}
public void preOrder(){
preOrder(root);
}
/**
* 二叉树的中序遍历
* @param node
*/
private void inOrder(Node node){
if(node == null)
return;
inOrder(node.left);
System.out.print(node.e);
inOrder(node.right);
}
public void inOrder(){
inOrder(root);
}
/**
* 二叉树的后序遍历
* @param node
*/
private void postOrder(Node node){
if(node == null)
return;
postOrder(node.left);
postOrder(node.right);
System.out.print(node.e);
}
public void postOrder(){
postOrder(root);
}
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree();
binaryTree.createTree();
binaryTree.preOrder();
System.out.println();
binaryTree.inOrder();
System.out.println();
binaryTree.postOrder();
}