查找二叉树:左子节点<父节点 ,右子节点>父节点。root节点的所有左边子孙节点都小于root节点,root节点的所有右边子孙节点都大于root节点。
public class serachBinaryTree {
private TreeNode2 root; //创建根节点
public void serachBinaryTree(){ //serachBinaryTree构造函数
}
public TreeNode2 put(int data){ //往树中查找建立二叉树
TreeNode2 node = null; //定义当前节点node
TreeNode2 parent = null; //定义当前节点的父节点
if(root == null){
node = new TreeNode2(0,data);
root = node;
}
node = root;
while(node != null){ //当当前节点node为空时,退出当前节点
parent = node; //将当前节点赋值给父节点
if(data < node.data){
node = node.leftChild; //当前节点变为其左节点
}
else if(data > node.data){ //当前节点变为其右节点
node = node.rightChild;
}
else {
return null;
}
}
node = new TreeNode2(0,data); //将输入的data数据封装到当前节点node
if(data < parent.data){ //当前节点与父节点建立连接关系
parent.leftChild = node;
node.parent = parent;
}
else if(data > parent.data){
parent.rightChild = node;
node.parent = parent;
}
return node;
}
public void midOrder(TreeNode2 node){ //递归中序遍历
if(node == null){
return ;
}
midOrder(node.leftChild);
System.out.println("data is"+node.data);
midOrder(node.rightChild);
}
public static void main(String []args){
serachBinaryTree binarytree = new serachBinaryTree();
int [] shuju = new int[]{13,8,29,10,23,87,65,33}; //定义一个乱序数组
for(int i : shuju){ //将数组中值建立起一颗查找二叉树
binarytree.put(i);
}
binarytree.midOrder(binarytree.root);
}
class TreeNode2{
private int index;
private int data;
private TreeNode2 leftChild;
private TreeNode2 rightChild;
private TreeNode2 parent;
TreeNode2(int index, int data){
this.index = index;
this.data = data;
}
}
}
结果:将建立起的查找二叉树采用中序遍历的方法打印出来,得出从小到大排列的序列。