查找二叉树:左子节点<父节点 ,右子节点>父节点。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; } else { 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; } } }
结果:将建立起的查找二叉树采用中序遍历的方法打印出来,得出从小到大排列的序列。