数据结构和算法

DSA 主页 DSA 概述 DSA 环境设置 DSA 算法基础 DSA 渐近分析

数据结构

DSA 数据结构基础 DSA 数据结构和类型 DSA 数组数据结构

链接列表

DSA 链接列表数据结构 DSA 双向链接列表数据结构 DSA 循环链表数据结构

堆栈 &队列

DSA 堆栈数据结构 DSA 表达式解析 DSA 队列数据结构

搜索算法

DSA 搜索算法 DSA 线性搜索算法 DSA 二分搜索算法 DSA 插值搜索 DSA 跳跃搜索算法 DSA 指数搜索 DSA 斐波那契搜索 DSA 子列表搜索 DSA 哈希表

排序算法

DSA 排序算法 DSA 冒泡排序算法 DSA 插入排序算法 DSA 选择排序算法 DSA 归并排序算法 DSA 希尔排序算法 DSA 堆排序 DSA 桶排序算法 DSA 计数排序算法 DSA 基数排序算法 DSA 快速排序算法

图形数据结构

DSA 图形数据结构 DSA 深度优先遍历 DSA 广度优先遍历 DSA 生成树

树数据结构

DSA 树数据结构 DSA 树遍历 DSA 二叉搜索树 DSA AVL 树 DSA 红黑树 DSA B树 DSA B+ 树 DSA 伸展树 DSA 尝试 DSA 堆数据结构

递归

DSA 递归算法 DSA 使用递归的汉诺塔 DSA 使用递归的斐波那契数列

分而治之

DSA 分而治之 DSA 最大最小问题 DSA 施特拉森矩阵乘法 DSA Karatsuba 算法

贪婪算法

DSA 贪婪算法 DSA 旅行商问题(贪婪方法) DSA Prim 最小生成树 DSA Kruskal 最小生成树 DSA Dijkstra 最短路径算法 DSA 地图着色算法 DSA 分数背包问题 DSA 作业排序截止日期 DSA 最佳合并模式算法

动态规划

DSA 动态规划 DSA 矩阵链乘法 DSA Floyd Warshall 算法 DSA 0-1 背包问题 DSA 最长公共子序列算法 DSA 旅行商问题(动态方法)

近似算法

DSA 近似算法 DSA 顶点覆盖算法 DSA 集合覆盖问题 DSA 旅行商问题(近似方法)

随机算法

DSA 随机算法 DSA 随机快速排序算法 DSA Karger 最小割算法 DSA Fisher-Yates 洗牌算法

DSA 有用资源

DSA 问答 DSA 快速指南


树形数据结构


树形数据结构

树形数据结构是一种非线性的抽象数据类型,具有基于层次结构的结构。它由通过链接连接的节点(数据存储的位置)组成。树形数据结构源于一个称为根节点的单个节点,并具有连接到根节点的子树。

树形数据结构

重要术语

以下是与树形相关的重要术语。

  • 路径 −路径是指沿着树的边缘的节点序列。

  • 根 − 树顶部的节点称为根节点。每棵树只有一个根节点,并且从根节点到任何节点都有一条路径。

  • 父节点 − 除根节点外,任何节点都有一条向上的边连接到称为父节点的节点。

  • 子节点 − 给定节点下方通过其向下的边连接的节点称为其子节点。

  • 叶子节点 − 没有任何子节点的节点称为叶节点。

  • 子树 − 子树表示节点的后代。

  • 访问 −访问是指在控制节点上时检查节点的值。

  • 遍历 − 遍历是指按特定顺序遍历节点。

  • 层级 − 节点的层级表示节点的代数。如果根节点位于层级 0,则其下一个子节点位于层级 1,其孙节点位于层级 2,依此类推。

  • 键 − 键表示节点的值,基于该值对节点执行搜索操作。

树的类型

树有三种类型 −

  • 通用树

  • 二叉树

  • 二叉搜索树

通用树

通用树是一种无序树形数据结构,其根节点至少有 0 个子树,最多有 n 个子树。

通用树的层次结构没有任何限制。因此,根节点就像所有其他子树的超集。

通用树

二叉树

二叉树是一种通用树,其根节点最多只能容纳 2 个子树:左子树和右子树。根据子节点的数量,二叉树分为三种类型。

满二叉树

  • 满二叉树是一种二叉树类型,其中每个节点都有 0 个或 2 个子节点。

完全二叉树

  • 完全二叉树是一种二叉树类型,其中所有叶节点都必须位于同一层。然而,完全二叉树的根节点和内部节点可以有 0 个、1 个或 2 个子节点。

完美二叉树

  • 完美二叉树是一种二叉树类型,其中所有叶节点都位于同一层,并且除叶节点外的每个节点都有 2 个子节点。

二叉树

二叉搜索树

二叉搜索树拥有二叉树的所有属性,此外还基于一些约束条件,额外添加了一些属性,这使得它们比二叉树更高效。

二叉搜索树 (BST) 中的数据始终以这样的方式存储:左子树的值始终小于大于根节点的值,且右子树的值始终大于根节点的值,即左子树 < 根节点 ≤ 右子树。

二叉搜索树

二叉搜索树 (BST) 的优势

  • 二叉搜索树比二叉树更高效,因为执行各种操作的时间复杂度降低了。

  • 由于键的顺序仅基于父节点,因此搜索操作变得更简单。

  • 二叉搜索树 (BST) 的对齐特性也有利于范围查询,范围查询用于查找两个键之间存在的值。这有助于数据库管理系统。

二叉搜索树 (BST) 的缺点

二叉搜索树的主要缺点是,如果节点中的所有元素都大于或小于根节点,树就会变得倾斜。简而言之,树会完全向一侧倾斜。

这种倾斜会使树变成链表而不是二叉搜索树,因为搜索操作的最坏情况时间复杂度变为 O(n)。

为了克服二叉搜索树的倾斜问题,引入了平衡二叉搜索树的概念。

平衡二叉搜索树

考虑一棵二叉搜索树,其左子树的高度为"m",右子树的高度为"n"。如果 (m-n) 的值等于 0、1 或 -1,则该树被称为平衡二叉搜索树。

树的设计方式是,一旦高度差超过 1,它们就会自平衡。二叉搜索树使用旋转作为自平衡算法。旋转有四种不同的类型:左左、右右、左右、右左。

自平衡二叉搜索树有多种类型 −