本帖最后由 权跃杰 于 2012-8-12 20:25 编辑
package cn.it;
class BinaryTree {// BinaryTree类开始
class Node {// Node类开始
private Comparable data;
private Node left;
private Node right;
Node(Comparable data) {
this.data = data;
}
public void addNode(Node newNode) {
if (newNode.data.compareTo(this.data) < 0) {//如果小于0放到左子树上
if (this.left == null) {//如果没有左子树,则放到第一个
this.left = newNode;
} else {//继续向下断送
this.left.addNode(newNode);
}
}
if (newNode.data.compareTo(this.data) >= 0) {//如果大于等于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.println(this.data);
if (this.right != null) {
this.right.printNode();
}
}
}// Node类结束
private Node root;
public void add(Comparable data) {
Node newNode = new Node(data);
if (this.root == null) {
this.root = newNode;
} else {
this.root.addNode(newNode);
}
}
public void print() {
this.root.printNode();
}
}// binaryTree类结束
public class Demo01 {
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
bt.add(7);
bt.add(5);
bt.add(3);
bt.add(8);
bt.add(13);
bt.add(12);
bt.add(15);
bt.print();
}//main 方法结束
}//Demo01类结束
这个程序有一点不明白,就是 这个打印数据不明白,
public void printNode() {// 采用中序遍历的方法
if (this.left != null) {
this.left.printNode();
}
System.out.println(this.data);
if (this.right != null) {
this.right.printNode();
}
}
它先判断。this.root.printNode() 判断根节点9,有没有左子树吧,
如果有(6),则继续向下,判断6,有没有左子树,有5 继续向下判断, 5没有左子树了,System.out.println(this.data);把5打印出来了,,,可是问题来了,
然后执行 if (this.right != null) {
this.right.printNode();
} 这代码,可是这个代码,,怎么执行呢,
this.right 5.right
5没有右子树呀,它是怎么向下,一直把数据打印出来了,
|