代码重构 【Github Actions】

This commit is contained in:
github-actions[bot]
2021-07-23 15:44:19 +00:00
parent c79cac3d9c
commit f671c90754
94 changed files with 1609 additions and 2111 deletions

View File

@@ -4,30 +4,28 @@ Morris 遍历利用树的左右孩子为空(大量空闲指针),实现空
![Morris前序](https://img-blog.csdnimg.cn/20210622155959185.gif)
看完视频是不是感觉自己搞懂了又感觉自己没搞懂哈哈咱们继续往下看
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.1u3at0ckvn34.png)
我们之前说的Morris 遍历利用了`树中大量空闲指针的特性`我们需要`找到当前节点的左子树中的最右边的叶子节点`将该叶子节点的 right 指向当前节点例如当前节点为2其左子树中的最右节点为 9 则在 9 节点添加一个 right 指针指向 2
我们之前说的Morris 遍历利用了`树中大量空闲指针的特性`我们需要`找到当前节点的左子树中的最右边的叶子节点`将该叶子节点的 right 指向当前节点例如当前节点为 2其左子树中的最右节点为 9 则在 9 节点添加一个 right 指针指向 2
其实上图中的 Morris 遍历遵循两个原则我们在动画中也能够得出
其实上图中的 Morris 遍历遵循两个原则我们在动画中也能够得出
1. p1.left == null p1 = p1.right(这也就是我们为什么要给叶子节点添加 right 指针的原因)
2. 如果 p1.left != null找到 p1 左子树上最右的节点(也就是我们的 p2 最后停留的位置)此时我们又可以分为两种情况一种是叶子节点添加 right 指针的情况一种是去除叶子节点 right 指针的情况
3. - 如果 p2 right 指针指向空让其指向 p1p1向左移动, p1 = p1.left
3. - 如果 p2 right 指针指向空让其指向 p1p1 向左移动, p1 = p1.left
- 如果 p2 right 指针指向 p1让其指向空为了防止重复执行则需要去掉 right 指针p1 向右移动p1 = p1.right
这时你可以结合咱们刚才提到的两个原则再去看一遍动画并代入规则进行模拟差不多就能完全搞懂啦
下面我们来对动画中的内容进行拆解
首先 p1 指向 root节点
首先 p1 指向 root 节点
p2 = p1.left下面我们需要通过 p2 找到 p1的左子树中的最右节点即节点 5然后将该节点的 right 指针指向 root并记录 root 节点的值
p2 = p1.left下面我们需要通过 p2 找到 p1 的左子树中的最右节点即节点 5然后将该节点的 right 指针指向 root并记录 root 节点的值
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.3h60vcjhqo80.png)
@@ -37,14 +35,10 @@ p2 = p1.left ,即节点 4 ,找到 p1 的左子树中的最右叶子节点,
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.zq91mdjkyzk.png)
继续向左移动 p1, p1 = p1.leftp2 = p1.left 也就是节点 8并将该节点的 right 指针指向 p1
继续向左移动 p1, p1 = p1.leftp2 = p1.left 也就是节点 8并将该节点的 right 指针指向 p1
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.5vsh71yrzxs0.png)
我们发现这一步给前两步是一样的都是找到叶子节点将其 right 指针指向 p1,此时我们完成了添加 right 指针的过程下面我们继续往下看
我们继续移动 p1 指针p1 = p1.leftp2 = p.left此时我们发现 p2 == null,即下图
@@ -59,7 +53,7 @@ p2 = p1.left ,即节点 4 ,找到 p1 的左子树中的最右叶子节点,
![image](https://cdn.jsdelivr.net/gh/tan45du/test@master/image.17t7n8yy340w.png)
下面则继续移动 p1 ,按照规则继续移动即可遇到的情况已经在上面做出了举例所以下面我们就不继续赘述啦如果还不是特别理解的同学可以再去看一遍动画加深下印象
下面则继续移动 p1 ,按照规则继续移动即可遇到的情况已经在上面做出了举例所以下面我们就不继续赘述啦如果还不是特别理解的同学可以再去看一遍动画加深下印象
时间复杂度 On空间复杂度 O1
@@ -140,4 +134,4 @@ class Solution {
}
```
好啦今天就看到这里吧咱们下期见
好啦今天就看到这里吧咱们下期见