二叉搜索树又称二叉查找树,二叉排序树,它具有以下几点特点:
- 如果它的左子树不为空,则左子树上结点的值都小于根结点的值;
- 如果它的右子树不为空,则右子树上结点的值都大于根结点的值;
- 子树也同样遵循以上两点。
下面来实现一颗二叉搜索树
/*** 二叉查找树* @author xzf* @date 2021/1/20 14:12*/public class SearchTree {private int data;SearchTree left;SearchTree right;public SearchTree(int data) {this.data = data;this.left = null;this.right = null;}/*** 插入元素* @param root* @param data*/public void insert(SearchTree root,int data){if(root.data<data){if(root.right == null){// 根结点下没有子结点root.right = new SearchTree(data);}else {insert(root.right,data);}}else {if (root.left == null) {root.left = new SearchTree(data);}else {insert(root.left,data);}}}/*** 中序输出* @param root*/public void in(SearchTree root){if(root != null) {in(root.left);System.out.print(root.data + " ");in(root.right);}}/*** 查找某个元素* @param root* @param data*/public SearchTree find(SearchTree root,int data){SearchTree node = root;while (node.data != data){if(node.data<data){node = node.right;}else {node = node.left;}if(node == null){return null;}}return node;}public static void main(String[] args) {//快速排序,归并排序,二叉树排序int data[] = {0,5,9,1,2,3,10};//第一个点作为跟结点SearchTree root = new SearchTree(data[0]);for(int i = 1 ; i < data.length ; i ++) {root.insert(root, data[i]);}System.out.println("中序遍历:");root.in(root);System.out.println(root.find(root,7));}}
