【数据结构与算法】第三章 树(解决查找问题)

本文介绍了树作为链表优化的解决方案,特别是二叉树和二分搜索树的概念。二分搜索树因其可比较性,提供高效的查找效率,查找时间复杂度降低到O(logN)。文章详细讲解了二分搜索树的特性、添加元素、查找元素、遍历以及删除元素的方法,并探讨了平衡二叉树(AVL树)的重要性,以保持高效查找性能。
摘要由CSDN通过智能技术生成

第三章 树(解决查找问题)

树是对链表的优化:

1、对于大量的输入数据,链表的线性访问时间太慢,不宜使用。

2、解决链表类的查找和排序的问题。

 

 

 

 

处理特殊领域的数据,会有出奇的高效率。快速搜索。

数据结构不光解决的是数据的存储问题,更重要的是在特定情况使用某种特定的数据结构可以解决高效的搜索问题。

树结构可以解决链表的线性访问时间效率的问题。说白了就是对链表作的一层优化方案。可以把时间复杂度降到O(logN)

 

一、二叉树(基础)

1)有唯一的根节点

2)每个节点最多有两个孩子,left、right

3)每个节点都有一个父节点,除根节点之外。

4)没有任何孩子的节点叫做根节点。

5)二叉树具有天然的递归结构

6)二叉树不一定是满的。

 

二、二分搜索树

1、特性

1)二分搜索树是一个二叉树(不一定都是满的)

2)特殊:它和普通的二叉树不同,它的每个节点的值必须是可比较的。(元素可比较性)

3)特殊:每个节点的值大于左子树所有节点的值,小于其右子树所有节点的值

4)满足上面的特性也就是说二分搜索树的每一棵子树也都是二分搜索树。

 

2、解决的问题

由于它有可比较性,所以查询一个值,就相当于每次都二分查找。大于节点的值去它右子树查询,小于节点的值去左子树中查找。可以大大提高查找的效率。

 

3、添加元素

1)添加元素的过程是一个不断比较的过程。大于比较节点的值就去右子树继续比较,小于节点的值就去左子树继续比较。直到我们找到一个null节点。那么插入就去就好。这个就是一个递归的过程。

2)有个特殊就是相等。(set因为我们实现的是set的接口,所以我们实现的二分搜索树对相等的情况不作处理。)

3)代码讲解:

@Override

public boolean add(E value) {

    root = add(root, value);

    return true;

}

private Node add(Node node, E value) {

        if (node == null) {

            //找到合适的位置进行插入操作

            size++;

            return new Node(value);

        }

//        else if (value.equals(node.value)) {

//            //遇到相等的值,不做任务处理

//            return node;

//        }

 

        //---------下面是不断的查找的过程-------------

        int compareResult = value.compareTo(node.value);

        if (compareResult < 0) {

            //添加节点发生改变,要建立关联关联

            node.left = add(node.left, value);

        } else if (compareResult > 0) {

            node.right = add(node.right, value);

        }

 

        //-----------逐层返回节点,最终到最顶次层调用---------------------

        return node;

    }

 

4、查找元素

@Override

public boolean contains(E value) {

    return contains(root, value);

}

 

pri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值