恢复二叉搜索树Python解法
生活随笔
收集整理的這篇文章主要介紹了
恢复二叉搜索树Python解法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給你二叉搜索樹的根節(jié)點(diǎn) root ,該樹中的 恰好 兩個(gè)節(jié)點(diǎn)的值被錯(cuò)誤地交換。請(qǐng)?jiān)诓桓淖兤浣Y(jié)構(gòu)的情況下,恢復(fù)這棵樹 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/recover-binary-search-tree
例:
輸入:root = [1,3,null,null,2]
輸出:[3,1,null,null,2]
解釋:3 不能是 1 的左孩子,因?yàn)?3 > 1 。交換 1 和 3 使二叉搜索樹有效。
解析:
因?yàn)橹挥袃蓚€(gè)節(jié)點(diǎn)出了問題,先對(duì)搜索樹進(jìn)行中序遍歷,如果只有一組逆序?qū)?#xff0c;那么只需要調(diào)換兩個(gè)位置就行了,如果有兩組逆序?qū)?#xff0c;因?yàn)橛疫叺臄?shù)大于左邊的數(shù),所以位置不對(duì)的一定是第一組的第一個(gè)較大的數(shù)和第二組第二個(gè)較小的數(shù),進(jìn)行調(diào)換即可。
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = rightclass Solution(object):def __init__(self):self.res = []def recoverTree(self, root):""":type root: TreeNode:rtype: None Do not return anything, modify root in-place instead."""self.mid(root)node1 = None # 第一個(gè)錯(cuò)誤節(jié)點(diǎn)node2 = None # 第二個(gè)錯(cuò)誤節(jié)點(diǎn)for i in range(len(self.res)-1):if self.res[i].val > self.res[i+1].val and node1 == None: # 只有一組逆序?qū)ode1 = self.res[i]node2 = self.res[i+1]elif self.res[i].val > self.res[i+1].val and node1 !=None: # 有兩組逆序?qū)ode2 = self.res[i+1] node1.val, node2.val = node2.val, node1.val # 將兩個(gè)數(shù)進(jìn)行對(duì)調(diào)def mid(self, root): # 中序遍歷if root is not None:self.mid(root.left)self.res.append(root)self.mid(root.right)
?
總結(jié)
以上是生活随笔為你收集整理的恢复二叉搜索树Python解法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 验证二叉搜索树Python解法
- 下一篇: 交错字符串Python解法