二叉搜索树 发表于 2017-11-23 | 更新于 2019-04-26 | 分类于 算法 基本概念二叉搜索树(BST)又叫二叉查找树,二叉排序树。二叉搜索树就是一棵二叉树,但是它又具有搜索树的特征: 每个结点都比它的左结点大,比右结点小。 每个结点的左右子树都是一课二叉搜索树。 对一棵二叉搜索树进行中序遍历结果是从小到大排序的结果。 代码实现123456789101112131415161718192021/**结点数据结构*/ static class BinaryNode<T> { T data; BinaryNode<T> left; BinaryNode<T> right; public BinaryNode(T data) { this(data,null,null); } public BinaryNode( T data, BinaryNode<T> left, BinaryNode<T> right) { this.data =data; this.left = left; this.right =right; } public BinaryNode() { data =null; this.left = left; this.right =right; } } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566/**查找指定的元素,默认从 * 根结点出开始查询*/ public boolean contains(T t) { return contains(t, rootTree); } /**从某个结点出开始查找元素*/ public boolean contains(T t, BinaryNode<T> node) { if(node==null) return false;//结点为空,查找失败 int result = t.compareTo(node.data); if(result>0) return contains(t,node.right);//递归查询右子树 else if(result<0) return contains(t, node.left);//递归查询左子树 else return true; } /** 这里我提供一个对二叉树最大值 最小值的搜索*/ /**找到二叉查找树中的最小值*/ public T findMin() { if(isEmpty()) { System.out.println("二叉树为空"); return null; }else return findMin(rootTree).data; } /**找到二叉查找树中的最大值*/ public T findMax() { if(isEmpty()) { System.out.println("二叉树为空"); return null; }else return findMax(rootTree).data; } /**查询出最小元素所在的结点*/ public BinaryNode<T> findMin(BinaryNode<T> node) { if(node==null) return null; else if(node.left==null) return node; return findMin(node.left);//递归查找 } /**查询出最大元素所在的结点*/ public BinaryNode<T> findMax(BinaryNode<T> node) { if(node!=null) { while(node.right!=null) node=node.right; } return node; }