数据结构与算法——二叉树

算法——二叉搜索树

(注 替换链与标准型为本人为了能够更加清除理解而定义概念)
1.基本原理:
满足二叉搜索树的性质—— 对树中的任意结点x 有以x为根的左子树的任意结点y 与右子树的任意结点z 满足 y.key<=x.key<=z.key 则这个二叉树是二叉搜索树
为了便于判定 常用将叶子结点的两个children指针设置为值NIL (当然 在具体实现算法时可以设置为其他的值)
2.二叉搜索树的构造:
(1)构造机理:
连续地输入一串值 将第一个值作为树的根 后续的输入填充应该满足:首先与根比较 如果>=根则 再与根的右孩子结点比较 如果<=此结点的值 再与其左结点比较 依次顺序进行比较 最后没有要比较的结点值时便将这个值填充到此处
按照这种方法可以最后构造出二叉搜索树
应该注意的是二叉搜索树的性质(也是其是否是二叉搜索树的判定)是由构造法推导所得 可以自行推导
(2)随机构造分析:
在后边的推导中 我们可以发现 对二叉搜索树的一些操作的时间复杂度 依耐于树高
所以对树高的研究至关重要

当我们输入一个排序好的数据时 我们构造的树为成为一个链状 此时的树高度h=n 达到了树高的上限值 此时对树的一系列操作达到了时间复杂度的最坏情况
为了避免这种情况的产生 我们一定要注意构造树的输入序列一定要足够随机

运用概率论的知识可以推导出对输入规模为n的随机输入序列的期望高度为:
E[h]<=lg(n3+6n2+11n+6/24)
故E[h]=O(lgn)

所以一定要保证输入序列的随机性(当然也有一些比较好的方法)
(3)标准型:
定义标准型为 满足二叉搜索树的性质的子树为标准型子树

但是我们有一个更为优雅的方法来判定标准型子树:
一个树的两个子树都是标准型子树 且满足二叉搜索树性质(左子树任意值<=x<=右子树任意值)(可以自行推导)
通过这个性质我们可以发现 一个树是否为标准型的判定 可以采用自下而上的方法 从叶子结点开始递归应用判定方法直到达到根结点
而二叉搜索树的构造是采用了自上而下的方法
3.二叉树的操作:
(1)插入:
作为最简单的操作 只需要按照二叉树的构造法就行 复杂度为O(h)
(2)搜索:
通过比较值的大小 类似于插入操作 复杂度也为O(h)
(3)遍历:
分为中序遍历 前序遍历和后序遍历 算法比较简单 不详细说明 需要注意的是 前序遍历和后序遍历的结果是一个排好序的序列 (这也可以作为一种排序方法 其复杂度为遍历复杂度与构造树复杂度之和) 复杂度为O(n)
(4)删除:
删除结点作为 操作中最复杂的一个算法(代码复杂一点点 相较于前几个操作) 复杂度可证明也为O(h)
具体算法如下图在这里插入图片描述在这里插入图片描述
采用替换链的方法来将左孩子为NIL的结点替换到要删除结点的右孩子的位置 最后 子树替换完成 删除操作

至此二叉搜索树内容基本写完
本人在学习中 日常更新
欢迎大佬指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是二叉树二叉树是一种树形结构,其中每个节点最多有两个子节点。一个节点的左子节点比该节点小,右子节点比该节点大。二叉树通常用于搜索和排序。 2. 二叉树的遍历方法有哪些? 二叉树的遍历方法包括前序遍历、中序遍历和后序遍历。前序遍历是从根节点开始遍历,先访问根节点,再访问左子树,最后访问右子树。中序遍历是从根节点开始遍历,先访问左子树,再访问根节点,最后访问右子树。后序遍历是从根节点开始遍历,先访问左子树,再访问右子树,最后访问根节点。 3. 二叉树的查找方法有哪些? 二叉树的查找方法包括递归查找和非递归查找。递归查找是从根节点开始查找,如果当前节点的值等于要查找的值,则返回当前节点。如果要查找的值比当前节点小,则继续在左子树中查找;如果要查找的值比当前节点大,则继续在右子树中查找。非递归查找可以使用栈或队列实现,从根节点开始,每次将当前节点的左右子节点入栈/队列,直到找到要查找的值或者栈/队列为空。 4. 二叉树的插入与删除操作如何实现? 二叉树的插入操作是将要插入的节点与当前节点的值进行比较,如果小于当前节点的值,则继续在左子树中插入;如果大于当前节点的值,则继续在右子树中插入。当找到一个空节点时,就将要插入的节点作为该空节点的子节点。删除操作需要分为三种情况:删除叶子节点、删除只有一个子节点的节点和删除有两个子节点的节点。删除叶子节点很简单,只需要将其父节点的对应子节点置为空即可。删除只有一个子节点的节点,需要将其子节点替换为该节点的位置。删除有两个子节点的节点,则可以找到该节点的后继节点(即右子树中最小的节点),将其替换为该节点,然后删除后继节点。 5. 什么是平衡二叉树? 平衡二叉树是一种特殊的二叉树,它保证左右子树的高度差不超过1。这种平衡可以确保二叉树的查找、插入和删除操作的时间复杂度都是O(logn)。常见的平衡二叉树包括红黑树和AVL树。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值