![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
CodeChickenTom
博客每次更新的代码都放会放在:https://github.com/18260036169
展开
-
BST删除操作
BST的删除操作向来被认为难度很大,因为它不同于插入,定位到了那个该插入的位置选择左边/右边进行插入即可,而删除操作则需要分成以下三种情况进行讨论,删除难度从上到下依次递增:case1 叶子结点case2 只有左子树/只有右子树的结点case3 左子树和右子树都存在的结点其实case1,case2的难度系数都不大,重难点就是在于处理case3这种情况的结点case1 叶子结点直接将...原创 2020-04-09 03:48:42 · 3180 阅读 · 7 评论 -
树的遍历方式 --- 前序遍历
前言先给大家上一段代码。这段代码出自LeetCode 144.Binary Tree Preorder Traversal是二叉树的前序遍历的递归代码写法。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...原创 2020-03-25 22:30:04 · 1271 阅读 · 0 评论 -
LeetCode - 19 - 删除链表的倒数第N个结点
过去刷LeetCode题推动那个工人指针跑的循环大多数都是while循环。因为我们在C语言刚接触循环这个概念的时候就学过,for一般都用于作用的结构大小较为明显,循环次数确定的场景下。而while之所以称为条件循环就是因为其没有固定的循环次数限制。一般在链表中,当我们的工人指针来到链表尽头的时候会结束循环,所以我们一般会使用while ( worker != nullptr )这样的一个语句来判断...原创 2020-02-12 16:38:14 · 111 阅读 · 0 评论 -
LeetCode - 234 - 回文链表 + 9 - 回文数(为234题打开思路)
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?234题原题 https://leetcode-cn.com/problems/palindrome-linked-list/回文是一个编程中经常出现的概...原创 2020-02-11 16:12:17 · 155 阅读 · 0 评论 -
LeetCode - 24 - 两两交换链表中的结点
好久不见!刚放假 + 电脑故障太多卡顿问题很严重,半个多月没更新博客。(其实就是惰性 + 贪玩,但我这个人不找借口好像浑身难受)今天半夜精神亢奋,于是来更新一篇LeetCode刷题。24.两两交换链表中的结点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该...原创 2020-01-22 22:46:25 · 274 阅读 · 0 评论 -
读书笔记 --- 数据结构与算法分析C语言描述 --- 12.29 --- Chapter4 树 page 80 - 87
4.4 AVL树对一棵预先排序的树输入数据,一连串的insert操作将花费二次时间,解决这个问题其中一个办法就是有一个称为平衡(balance)的附加结构条件,任何结点深度均不能过深。AVL(Adelson-Velskii and Landis)树是带有平衡条件的二叉查找树。这个平衡条件固定且容易保持,需保证树的深度为O(log N)。我们一般将空子树高度定义为-1,加入我们要求结点左右子树...原创 2019-12-29 23:30:21 · 152 阅读 · 0 评论 -
读书笔记 --- 数据结构与算法分析C语言描述 --- 12.24 --- Chapter4 树 page76 - 79
4.3.5 delete结点情况对应解决方案没有任何儿子的结点此结点为BST中的叶结点,直接删除仅有一个儿子的结点类似于一个链表:grandfather->father->children中删除掉father结点的操作有两个儿子的结点找到右子树最小的结点代替被删除的结点,这个最小的结点为右子树中最左边的元素,因为最小的那个元素一定不会再有左儿子(...原创 2019-12-24 22:41:49 · 181 阅读 · 0 评论 -
读书笔记 --- 数据结构与算法分析C语言描述 --- 12.22 --- Chapter4 树 page70 - 76
4.2 二叉树二叉树每个结点至多有两个儿子,即可以拥有(0,1,2)个儿子。由此二叉树的平均深度要比N小得多,为O(sqrt(N)),再对于特殊类型的二叉树:二叉查找树(Binary Search Tree)深度平均值为O(log N)。而特殊情况就是二叉树是一棵斜树,为一个特殊的链表,深度可以达到N - 1。4.2.1 实现结点的儿子可以用指针指向他们,类似于一个双向链表。struct ...原创 2019-12-22 19:26:56 · 144 阅读 · 0 评论 -
读书笔记 --- 数据结构与算法分析C语言描述 --- 12.21 --- Chapter4 树 page65 - 69
4.0 引言为解决链表的线性访问时间过慢这个问题,介绍一种大部分操作时间平均为O(log N)的数据结构 — 树第二种修改,对于长的指令序列每种操作的运行时间基本上是O(log N) — 二叉查找树(Binary Search Tree)树在cs中是非常有用的抽象概念,本章我们将学习:树在操作系统中的文件系统的应用树如何能够用来计算算术表达式的值(常考)树支持O(log N)进行...原创 2019-12-21 20:36:03 · 229 阅读 · 0 评论