题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
如下代码构建了一个二叉搜索树,用于测试用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
L = {'A': TreeNode(3),
'B': TreeNode(2),
'C': TreeNode(6),
'D': TreeNode(1),
'E': TreeNode(4),
'F': TreeNode(8),
'G': TreeNode(5),
'H': TreeNode(7),
'I': TreeNode(9)}
L['F'].left, L['F'].right = L['H'], L['I']
L['E'].right = L['G']
L['C'].left, L['C'].right = L['E'], L['F']
L['A'].left, L['A'].right = L['B'], L['C']
L['B'].left = L['D']
root = L['A']
递归。
- 函数recur(root)能够把root为根的树编程一个排序的双向链表,root不变。
- 已有root,根据双向链表的特性,可以很容易得到该双向链表的收尾节点。
1 | class Solution: |
中序遍历,把节点都存放到一个列表里,然后构建相邻节点之间的双向连接。
1 | class Solution: |