From a5dd3658830775dfd8d6ff3b8de8026007eb26d7 Mon Sep 17 00:00:00 2001 From: Sainnhe Park Date: Wed, 1 Feb 2023 13:11:44 +0800 Subject: [PATCH] Update notes --- notes/src/btree_basic.md | 1 + notes/src/btree_iter.md | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/notes/src/btree_basic.md b/notes/src/btree_basic.md index 59c0c59..8911f0f 100644 --- a/notes/src/btree_basic.md +++ b/notes/src/btree_basic.md @@ -73,3 +73,4 @@ struct TreeNode { 1. 深度优先搜索从下往上,广度优先搜索从上往下,所以如果需要处理从上往下并且状态积累的情形 (e.g. [s0404](https://leetcode.cn/problems/sum-of-left-leaves/) && [s0257](https://leetcode.cn/problems/binary-tree-paths/)) 可以先创建一个结构体用来描述节点状态,然后用 BFS 遍历。 2. 写递归时,如果 `TreeNode *ptr` 不足以描述当前节点状态,则可以写一个辅助函数,接收 `TreeNode *ptr` 为参数,返回 `TreeNodeState` 来描述当前节点的状态。参考 [s0098](https://leetcode.cn/problems/validate-binary-search-tree/) 3. 另一种需要结构体的地方是需要获得每个节点路径(即根节点到当前节点所经过的路径),可以用 DFS 或 BFS 遍历。 +4. 如果要处理不是从上往下积累状态,而是按照一定规则遍历节点并积累状态的情况(e.g. [s0538](https://leetcode.cn/problems/convert-bst-to-greater-tree/description/))则考虑用三种递归遍历方式中的一种来遍历,并用一个全局变量来记录遍历状态。另外,务必理解并记忆每种遍历方式的动态图! diff --git a/notes/src/btree_iter.md b/notes/src/btree_iter.md index 2882afa..4f33273 100644 --- a/notes/src/btree_iter.md +++ b/notes/src/btree_iter.md @@ -29,6 +29,8 @@ void main(void) { 前中后序遍历的区别就在于访问节点的顺序不同。 +**注意**:务必理解和记忆每种遍历的遍历动态图! + 前序遍历: ```cpp @@ -37,6 +39,8 @@ void main(void) { dfs(curNode->right, result); ``` +![begin](https://paste.sainnhe.dev/cSaJ.gif) + 中序遍历: ```cpp @@ -45,6 +49,8 @@ void main(void) { dfs(curNode->right, result); ``` +![medium](https://paste.sainnhe.dev/KJMD.gif) + 后序遍历: ```cpp @@ -53,6 +59,8 @@ void main(void) { printf("%d\n", curNode->val); ``` +![end](https://paste.sainnhe.dev/PHbJ.gif) + ## 深度优先遍历(迭代法) 由于递归本质是对栈进行操作,因此也可以用迭代+栈的方式实现。