用python将二叉搜索树转换为双向循环链表,怎么防止循环输出
时间: 2024-02-12 07:09:40 浏览: 80
以下是将二叉搜索树转换为双向循环链表并防止循环输出的 Python 代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def treeToDoublyList(self, root: TreeNode) -> TreeNode:
if not root:
return None
self.head = None
self.prev = None
self.dfs(root)
self.head.left = self.prev
self.prev.right = self.head
return self.head
def dfs(self, node):
if not node:
return
self.dfs(node.left)
if self.prev:
self.prev.right = node
node.left = self.prev
else:
self.head = node
self.prev = node
self.dfs(node.right)
def printList(self, head: TreeNode):
if not head:
return
p = head
while p:
print(p.val, end=" ")
p = p.right
if p == head:
break
print()
```
这个方法的基本思路与上一个问题的解法相同,只是在输出双向循环链表时需要进行特殊处理,以防止循环输出。
我们在 `Solution` 类中添加了一个 `printList` 方法,用于输出双向循环链表。该方法接收一个节点作为参数,然后按照顺序遍历链表,并在遍历到头节点时判断是否已经遍历完整个链表,如果已经遍历完整个链表,则跳出循环。
在主函数中,我们先调用 `dfs` 方法将二叉搜索树转换为双向循环链表,并将双向循环链表的头节点的左指针指向前一个节点,将前一个节点的右指针指向头节点。然后调用 `printList` 方法输出双向循环链表。
阅读全文