LeetCodeテンセント50題Python実現の「二叉樹の中でK番目の小さい要素」
3331 ワード
タイトル
二叉探索ツリーを指定し、関数kthSmallestを記述してk番目の最小要素を検索します.
説明:kは常に有効であり、1≦k≦二叉探索ツリー要素の個数であると仮定できます.
例1:
入力:root=[3,1,4,null,2],k=1 3/1 4 2出力:1例2:
入力:root=[5,3,6,2,4,null,null,1],k=3 5/3 6/2 4/1出力:3ステップ:二叉検索ツリーが頻繁に変更され(挿入/削除操作)、k番目の小さな値を頻繁に検索する必要がある場合、kthSmallest関数を最適化する方法
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
構想二叉探索ツリーBSTには重要な性質がある:中順遍歴はソート配列として、この性質に基づいて、問題を中順遍歴k番目のノードを探す値に変換することができる. によって実装される方法は、答えとカウントを格納するために2つのグローバル変数resとcountを確立することである:ノードにアクセスするたびに、カウンタ−1;count==0の場合、k番目のノードに到着したことを表し、resに答えを記録する. 答えが見つかった後、遍歴を続ける必要はないので、resが空であるかどうかを判断するたびに、空でなければ直接戻ります.
コード#コード#
ref:https://leetcode-cn.com/problems/two-sum/solution/kth-smallest-element-in-a-bst-ti-qian-zhong-zhi-zh/
二叉探索ツリーを指定し、関数kthSmallestを記述してk番目の最小要素を検索します.
説明:kは常に有効であり、1≦k≦二叉探索ツリー要素の個数であると仮定できます.
例1:
入力:root=[3,1,4,null,2],k=1 3/1 4 2出力:1例2:
入力:root=[5,3,6,2,4,null,null,1],k=3 5/3 6/2 4/1出力:3ステップ:二叉検索ツリーが頻繁に変更され(挿入/削除操作)、k番目の小さな値を頻繁に検索する必要がある場合、kthSmallest関数を最適化する方法
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
構想
コード#コード#
ref:https://leetcode-cn.com/problems/two-sum/solution/kth-smallest-element-in-a-bst-ti-qian-zhong-zhi-zh/
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
self.res, self.count = None, k
def inorder(root):
if not root: return
inorder(root.left)
if self.res: return
self.count -= 1
if not self.count: self.res = root.val
inorder(root.right)
inorder(root)
return self.res