难度:困难
题目描述:
思路总结:找啊找啊找规律。做过就会系列。思路就是两次中序遍历,找到两次不满足条件的节点(可能会相邻),并交换其val。
第一个节点,是第一个按照中序遍历时候前一个节点大于后一个节点,我们选取前一个节点;
第二个节点,是在第一个节点找到之后, 后面出现前一个节点大于后一个节点,我们选择后一个节点;
题解一:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
#思路:中序遍历找到出错结点,与某结点交换。
firstNode = None
secondNode = None
pre = TreeNode(float("-inf"))
stack = []
p = root
while p or stack:
while p:
stack.append(p)
p = p.left
p = stack.pop()
if not firstNode and pre.val > p.val:
firstNode = pre
if firstNode and pre.val > p.val:
#print(firstNode.val,pre.val, p.val)
secondNode = p
pre = p
p = p.right
firstNode.val, secondNode.val = secondNode.val, firstNode.val
题解一结果:
来源:CSDN
作者:LotusQ
链接:https://blog.csdn.net/qq_30057549/article/details/103475378