二叉树的概念不说了,搜索引擎比我说的更加清楚和完整。
下面的例子允许将各种java.lang.Comparable<T>的子类作为节点元素被添加到二叉树结构当中,并依据二叉树的中序遍历的方式将二叉树结构当中所有元素输出。
二叉树结构的Java实现类
package org.tang.binarytree;
public class BinaryTree<T extends Comparable<T>> {
private Node<T> root;
public Node<T> getRoot() {
return root;
}
public void setRoot(Node<T> root) {
this.root = root;
}
public void addElement(T element){
if(element == null){
return;
}
Node<T> node = new Node<T>(element);
if(this.root == null){
this.root = node;
}else{
this.root.addChild(node);
}
}
public void printBinaryTree(){
if(this.root == null){
System.out.println("当前为空对象,无法打印。");
return;
}
this.root.printNode();
}
private static class Node<E extends Comparable<E>>{
private E nodeData;
private Node<E> left;
private Node<E> right;
private Node(E nodeData){
this.nodeData = nodeData;
}
private void addChild(Node<E> child){
if(child == null){
return;
}
if(this.compareTo(child) >= 0){
if(this.left == null){
this.left = child;
}else{
this.left.addChild(child);
}
}else{
if(this.right == null){
this.right = child;
}else{
this.right.addChild(child);
}
}
}
private int compareTo(Node<E> node){
return this.nodeData.compareTo(node.nodeData);
}
private void printNode(){
if(this.left != null){
this.left.printNode();
}
System.out.println(this.nodeData.toString());
if(this.right != null){
this.right.printNode();
}
}
}
}
二叉树实现类的使用方式
package org.tang.binarytree;
public class Client {
public static void main(String[] args){
BinaryTree<Integer> bt = new BinaryTree<Integer>();
bt.addElement(101);
bt.addElement(45);
bt.addElement(49);
bt.addElement(1);
bt.addElement(20);
bt.addElement(-1);
bt.printBinaryTree();
BinaryTree<String> bt2 = new BinaryTree<String>();
bt2.addElement("a");
bt2.addElement("A");
bt2.addElement("z");
bt2.addElement("e");
bt2.printBinaryTree();
}
}