From 8626139382f9730b8ba95fedca1f78756ed0b985 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:18:02 +0800 Subject: [PATCH] =?UTF-8?q?Update=2036.=20=E4=BA=8C=E5=8F=89=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E6=A0=91=E4=B8=8E=E5=8F=8C=E5=90=91=E9=93=BE=E8=A1=A8?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充利用中序遍历将二叉搜索树转换为双向链表的实现思路,以及修改指针不影响遍历的原理解释。 --- notes/36. 二叉搜索树与双向链表.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/notes/36. 二叉搜索树与双向链表.md b/notes/36. 二叉搜索树与双向链表.md index 6e8bfcfd..29b67a43 100644 --- a/notes/36. 二叉搜索树与双向链表.md +++ b/notes/36. 二叉搜索树与双向链表.md @@ -10,6 +10,10 @@ ## 解题思路 +二叉搜索树的中序遍历是升序的,因此按中序遍历节点,用 pre 记录上一个访问的节点,访问 node 时把两者双向连起来:node.left = pre,pre.right = node。第一个访问的节点(最小值)就是链表头 head;遍历结束后 pre 指向最大的节点,再把 head 与 pre 首尾相连,得到循环双向链表。 + +修改指针不会影响遍历:改 node.left 时左子树已经遍历完,改 pre.right 时 pre 的右子树也已经遍历完或正在遍历(node 就在其中)。 + ```java private Node pre = null; private Node head = null;