相对于上一个,这个二叉树是一个排序二叉树,根据你输入的结点的名称自动按大小排序。结点类Node放在了BinaryTree2类的里边,是为了更好的封装。这个代码相对于上一个更易读,更面向对象!值得一读!
class BinaryTree2
{
class Node
{
private String name;// String类是已经实现了Comparable<String>接口的,可以进行比较
private Node left;
private Node right;
public Node(String name)
{
this.name = name;
}
public void addNode(Node newNode)
{
if (newNode.name.compareTo(this.name) < 0)
{// 放在左子树
if (this.left == null)
{
this.left = newNode;
}
else
{
this.left.addNode(newNode);
}
}
else if (newNode.name.compareTo(this.name) > 0)
{// 放在右子树
if (this.right == null)
{
this.right = newNode;
}
else
{
this.right.addNode(newNode);
}
}
}
public void printNode()
{// 中序遍历
if (this.left != null)
{
this.left.printNode();
}
System.out.print(this.name + "-->");
if (this.right != null)
{
this.right.printNode();
}
}
}
private Node root;
public void add(String name)
{
Node newNode = new Node(name);
if (root == null)
{
root = newNode;
}
else
{
root.addNode(newNode);
}
}
public void print()
{
this.root.printNode();
}
}
class Test2
{
public static void main(String[] args)
{
BinaryTree2 bt = new BinaryTree2();
bt.add("A");
bt.add("D");
bt.add("B");
bt.add("F");
bt.add("E");
bt.add("C");
bt.add("F");
bt.add("G");
bt.print();
}
}