题目描述:
题解:参考力扣
二叉搜索树的中序遍历结果就是按找从小到大排列,在对二叉搜索树进行中序遍历的同时,确定left right指针位置。
1.创建一个pre节点,初始化为None。
2.定义dfs函数,输入cur节点:
<1>对cur.left调用dfs。
<2>处理cur节点,如果此时pre为None,说明当前cur为head节点,将cur保存在head中。
否则,pre为cur在生成的链表中的前一个节点,pre.right=cur cur.left=pre。
pre后移一个节点。
<3>对cur.right调用dfs。
<4>对最后的head和最后一个节点进行处理,此时pre对应最后一个节点。head.left=pre pre.right=head
class Solution: def treeToDoublyList(self, root: 'Node') -> 'Node': def dfs(cur): if not cur: return dfs(cur.left) if self.pre: self.pre.right = cur cur.left = self.pre else: self.head = cur self.pre = cur dfs(cur.right) if root == None: return self.pre = None dfs(root) self.head.left, self.pre.right = self.pre, self.head return self.head