数据结构----二叉搜索树
在数据结构中,二叉树是一种比较常见的树结构。在有的应用场景下,为什么要使用二查搜索树呢?使用二查搜索树可以给我们带来什么好处呢?
比如我们做查询操作时,数组的查询插入或者删除的最坏的时间复杂度是O(n)
当我们把这个数组进行排序以后,查询的最坏时间复杂度为o(log n),但是插入和删除元素的时间复杂度依然没有发生变化。
二叉搜素树的查询插入和删除的最坏时间复杂度都为o(log n),所以使用二叉搜索树可以大大的提高效率。
二叉搜索树服从以下的规则:
任意一个节点的值都大于左子树节点的值
任意一个节点的值都小于右子树节点的值
每个节点的左右子树依然是一颗二叉搜索树
package com.BinarySearchTree; import java.util.ArrayList; public class BinarySearchTree { public static void main(String[] args) { BinarySearchTree binarySearchTree = new BinarySearchTree(); binarySearchTree.add(7); binarySearchTree.add(4); binarySearchTree.add(9); binarySearchTree.add(2); binarySearchTree.add(5); binarySearchTree.add(8); binarySearchTree.add(11); binarySearchTree.add(1); binarySearchTree.add(3); binarySearchTree.add(12); binarySearchTree.print(); } private int size;//记录集合的大小 private Node root;//树的根节点 public void add(Integer val){ if(val == null){ throw new IllegalArgumentException("val must not null"); } if (size == 0 || root == null){//第一次插入,设置根节点 root = new Node(val,null);//初始化根节点 size++; }else{ Node parent = root;//记录父节点 Node node = root; int cmp = 0; while (node != null){//把值放到合适的位置 parent = node; cmp = val - node.integer; if(cmp > 0){ node = node.right; }else if(cmp < 0){ node = node.left; }else{ return; } } if(cmp > 0){ parent.right = new Node(val,parent); }else if(cmp < 0){ parent.left = new Node(val,parent); } } } /** * 集合的容量 * @return */ public int size(){ return size; } /** * 清除所有节点 */ public void clear(){ } /** * 层级遍历 */ public void print() { ArrayList<Node> list = new ArrayList<>(); ArrayList<Integer> valList = new ArrayList<>(); list.add(root);//根节点入队 valList.add(root.integer); int i = 0; while (i < list.size()){ Node node = list.get(i); if(node.left != null){ list.add(node.left); valList.add(node.left.integer); } if(node.right != null){ list.add(node.right); valList.add(node.right.integer); } i++; } System.out.println(valList); } private static class Node{ Integer integer; Node left; Node right; Node parent; public Node(Integer integer, Node parent) { this.integer = integer; this.parent = parent; } } }
下一篇:
数据结构算法——剪枝