/**
* 二叉查找树:一列无序的int数组,通过二叉树查找方法创建我们需要的树,最后前序遍历得到有序的序列
*
* @author timmy1 实现步骤:第一个数字即为根节点:后面的元素通过比较数据的大小
* 1.如果比当前节点数据域小,则查找该节点的左孩子,如果没有左孩子,则以该数据为节点创建左孩子。
* 2.如果有左孩子,还需要进行比较,比节点数据域小,查找左孩子,比节点数据域大查找,查找右孩子,没有则创建,有的话进行比较
*/
public class BinaryCheckTree {
private TreeNode<Integer> root;
private void createBinCheckTree(int i, int[] array) {
if (i == array.length - 1)
return;
int data = array[i];
TreeNode<Integer> newNode = new TreeNode<Integer>(data);
TreeNode<Integer> node;
if (root == null) {
root = newNode;
return;
}
node = root;
// 节点与左右孩子的关系是左小右大
while (node != null) {
if (node.getData() > data) {// 数组元素比节点数据域小-》查找左节点
if (node.leftChild != null) {
node = node.leftChild;
} else {
node.leftChild = newNode;
break;
}
} else {// 数组元素比节点数据域大-》查找右节点
if (node.rightChild != null) {
node = node.rightChild;
} else {
node.rightChild = newNode;
break;
}
}
}
}
public static void main(String[] args) {
BinaryCheckTree tree = new BinaryCheckTree();
int[] array = new int[] { 9, 23, 8, 10, 78, 13, 1, 5, 8, 32, 12 };
for (int i = 0; i < array.length; i++) {
tree.createBinCheckTree(i, array);
}
tree.printPreTra();
}
private void printPreTra() {
TreeUtil.midTraversal(root);
}
}
结果打印:
pre Traversal:1
pre Traversal:5
pre Traversal:8
pre Traversal:8
pre Traversal:9
pre Traversal:10
pre Traversal:13
pre Traversal:23
pre Traversal:32
pre Traversal:78