把二叉搜索树转化为循环双链表
时间: 2023-07-25 19:12:42 浏览: 88
将二叉搜索树转化为循环双链表需要进行中序遍历,并且在遍历的过程中修改节点的指针指向。
具体步骤如下:
1. 定义一个全局变量pre,用于记录当前节点的前一个节点。
2. 定义一个递归函数convert,用于进行中序遍历,并修改节点指针指向。函数接受一个参数root,表示当前节点。
3. 在convert函数中,先递归遍历左子树,将左子树转化为循环双链表,并将左子树的最后一个节点与当前节点相连。
4. 修改当前节点的前驱指针为pre,如果pre不为空,则将pre的后继指针指向当前节点。
5. 将pre更新为当前节点。
6. 递归遍历右子树,将右子树转化为循环双链表,并将当前节点与右子树的第一个节点相连。
7. 最后返回循环双链表的头节点,即为中序遍历的第一个节点。
完整代码如下:
```
class Node:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
self.pre = None
self.next = None
class Solution:
def treeToDoublyList(self, root: 'Node') -> 'Node':
if not root:
return None
self.pre = None
head = self.convert(root)
tail = head.pre
head.pre = tail
tail.next = head
return head
def convert(self, root):
if not root:
return None
left = self.convert(root.left)
cur = Node(root.val)
cur.pre = self.pre
if self.pre:
self.pre.next = cur
self.pre = cur
right = self.convert(root.right)
if left:
left.pre.next = cur
cur.pre = left.pre
if right:
right.pre = cur
cur.next = right
return left if left else cur
```
阅读全文