数据结构:二分搜索树(添加,查询元素)

树结构:将数据使用树结构储存后,高效

  • 二分搜索树
  • 平衡二叉树 
  • 堆:并查集。
  • 线段树:trie (字典树,前缀树)

当使用某些特定的数据结构存储问题之后,可以帮助我们更加高效的算法问题。

二叉树(多叉树):动态的数据结构。

二叉树具有唯一的根节点,每个节点最多有两个孩子节点,最多有一个父亲节点。每一个节点都有指向左和右。(左孩子,右孩子)

叶子节点(节点没有任何孩子)

二叉树具有天然的递归结构。每个节点的左子树,右子树也是二叉树。

二叉树不一定是满的。

二分搜索树(Binary Search Tree)

二分搜索树的每个节点的值,大于其左子树的所有节点的值,小于其右字数的所有节点的值。

每一颗子树也是二分搜索树。

存储的元素必须具有可比较性

 

向二分搜索树中添加元素:左小右大

暂时实现的二分搜索树不包含重复的元素,如果在某些运用中需要等于,只需要把等于关系放在关系里即可以。

public class BST<E extends Comparable<E>> {

	public class Node {
		private E e;
		public Node left, right;

		public Node(E e) {
			this.e = e;
			left = null;
			right = null;
		}
	}

	private Node root;
	private int size;

	public BST() {
		root = null;
		size = 0;
	}

	public int size() {
		return size;
	}

	public boolean isEmpty() {
		return size == 0;
	}

	public void add(E e) {

		root = add(root, e);

	}

	// 向以node为根的二分搜索树中插入元素e,递归算法
	// 返回插入新节点后二分搜索树的根
	public Node add(Node node, E e) {
		if (node == null) {
			size++;
			return new Node(e);
		}
		if (e.compareTo(node.e) < 0) {
			node.left = add(node.left, e);
		} else if (e.compareTo(node.e) > 0) {
			node.right = add(node.right, e);
		}
		return node;
	}
}

查询元素:

public boolean contains(E e) {
		return contains(root, e);
	}

	// 看以node为根的二分搜索树中是否包含元素e
	private boolean contains(Node node, E e) {
		if (node == null)
			return false;
		if (e.compareTo(node.e) == 0) {
			return true;
		} else if (e.compareTo(node.e) < 0) {
			return contains(node.left, e);
		} else
			return contains(node.right, e);
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值