题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
class Solution: pre = None head = None def Convert(self , pRootOfTree ): # 递归不过是程序的一种循环方式,免去了无限if..else..的烦恼 if not pRootOfTree: # 如果遇到递归,程序会一直将递归执行完才执行下一步,执行不完就卡在这一步一直执行 return None self.Convert(pRootOfTree.left) # 此处递归左子节点,直到左子节点为空则返回空,再回到上一层递归执行下一步操作 if not self.pre: # 回来以后发现pre和head依然为空,则将倒数第二层递归的pRootOfTree赋值给它们,再回到上一层递归 self.pre = pRootOfTree self.head = pRootOfTree else: # 回来以后发现pre不为空,然后将pre的right指向倒数第三层递归里的pRootOfTree self.pre.right = pRootOfTree #并将当前层的pRootOfTree的left指向pre pRootOfTree.left = self.pre self.pre = pRootOfTree # 然后将当前层的pRootOfTree设置为pre,供上层递归使用 self.Convert(pRootOfTree.right)# 此处递归右子节点,如果没有则返回None,否则将执行前面的步骤 return self.head