package com.redis.redandblack; /** * 特点: * 1.如果它的左子树不为空,则左子树上的节点值小于根节点 * 2.如果它的右子树不为空,则右子树上的节点值大于等于根节点 * 3.子树同样遵循以上两点 * 只要一棵树是二叉查找树,那么中序遍历一定是有序的 * 二叉查找算法? * 归并排序:每一次分一半,最终分的是logn */ public class BinarySearchTree { //分析数据结构 属性 int data; BinarySearchTree left; BinarySearchTree right; //初始化对象默认只有根节点 public BinarySearchTree(int data) { this.data = data; this.left = null; this.right = null; } public int getData() { return data; } public void setData(int data) { this.data = data; } public BinarySearchTree getLeft() { return left; } public void setLeft(BinarySearchTree left) { this.left = left; } public BinarySearchTree getRight() { return right; } public void setRight(BinarySearchTree right) { this.right = right; } /** * @param root 根节点 * @param data 插入的值 */ //插入的时候每次都是和根节点比较,一直找到插入的位置 //插入的过程就是查找的过程 public void insert(BinarySearchTree root, int data) { //递归就是把一个大问题分解成许多的小问题,每一个小问题的操作过程完全一样,这样的需求就可以用递归思路去解决 if (root.getData() < data) { //如果根节点的值小于插入的值 if (root.right == null) { root.right = new BinarySearchTree(data); } else { insert(root.right, data); } } else { if (root.left == null) { root.left = new BinarySearchTree(data); } else { insert(root.left, data); } } } public void find(BinarySearchTree root, int data) { if (root != null) { if (root.data > data) { find(root.left, data); } else { find(root.right, data); } } } }
09-15
09-15