作者在 2016-08-04 11:19:24 发布以下内容
http://cslibrary.stanford.edu/110/BinaryTrees.html
public class BinTree {
private Node root;
public static class Node {
private int data;
private Node left;
private Node right;
public Node(int data) {
this.data = data;
}
}
public BinTree() {
this.root = null;
}
/*
* 原则: 一个结点如有左右子结点,则符合: 左子结点比该结点小,右子结点比该结点大。 递归加入数据。 1,如果此结点为空则直接加入(似不简单明
* 了,为什么不直接加入左或右子树对应的空结点呢,这是因为此构造设计树根初始是空的原因。)。
* 2,如果当前结点不为空,则参数与该结点值比较,参数值大的话则交给此结点的右子树,继续找直至找到满足条件的结点位置加入,反之交给该结点左子树处理,找到对应位置加入。
*/
public Node insertNode(Node node, int data) {
if (node == null) {
node = new Node(data);
} else {
if (node.data >= data) {
node.left = insertNode(node.left, data);
} else {
node.right = insertNode(node.right, data);
}
}
return node;
}
//封装insertNode(Node node, int data),便于外部调用
public void insert(int data) {
root = insertNode(root, data);
}
public void create(int a[]) {
for (int i = 0; i < a.length; i++) {
insert(a[i]);
}
}
/* 中序遍历,
*/
public void midSort(Node node) {
if (node == null) {
return;
}
midSort(node.left);
System.out.print(node.data + ", ");
midSort(node.right);
}
public void printTree() {// 封装midSort(Node node);便于外部调用。
midSort(root);
}
public static void main(String[] args) {
BinTree bt = new BinTree();
int[] array = { 13, 15, 8, 2, 5, 7, 9, 10, 78, 4, 33 };
bt.create(array);
bt.printTree();
}
}