```python
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
# 分治法,得到左右链表,再和root连起来
class Solution:
"""
@param root: root of a tree
@return: head node of a doubly linked list
"""
def treeToDoublyList(self, root):
# Write your code here.
if not root:
return root
head = self.traverse(root)
tail = head
while tail.right:
tail = tail.right
tail.right = head
head.left = tail
return head
def traverse(self, root) -> TreeNode:
if not root: #一般不需要判断到叶子
return root
head = root
#注意这里判断左右子树是否存在,不存在的话直接返回根节点。
if root.left:
leftNode = self.traverse(root.left)
head = leftNode
while leftNode.right:
leftNode = leftNode.right
leftNode.right = root
root.left = leftNode
if root.right:
rightNode = self.traverse(root.right)
root.right = rightNode
rightNode.left = root
return head
```