blog

答え:リートコード776

ルートノードrootと目標値Vを持つバイナリ検索ツリーが与えられたとき、1つのサブツリーは、ノードを持つ2つのサブツリーにツリーを分割......

Jul 4, 2020 · 2 min. read

Question

ルート・ノード root と目標値 V を持つバイナリ・サーチ・ツリーが与えられたとき,ツリーを2つのサブツリーに分割し,一方のサブツリーはすべて目標値より小さいか等しいノードを持ち,もう一方のサブツリーはすべて目標値より大きいノードを持つようにします.一方のサブツリーには目標値より小さいか等しいノードがすべてあり、もう一方のサブツリーには目標値より大きいノードがすべてあります。 必ずしも、ツリーに値 V のノードを含むとは限りません。

さらに、元のツリーの構造はほとんど残っているはずです。 正式には、元のツリーで親Pを持つ子Cが、分割後も同じサブツリーにある場合、ノードCは親Pを持つはずです。形式的には、元のツリーで親Pを持つ任意の子Cについて、分割後にそれらが両方とも同じサブツリーにある場合、ノードCはまだ親Pを持つべきです。

分割後、両方のサブツリーのルートTreeNodeを任意の順序で出力する必要があります。

例1.

 4
 / \
 2 6
 / \ / \
1 3 5 7

一方、出力のダイアグラムは

 4
 / \
 3 6 and 2
 / \ /
 5 7 1

Answer:

class Solution:
 def splitBST(self, root: TreeNode, V: int) -> List[TreeNode]:
 if not root:
 return [None, None]
 
 if root.val <= V:
 left, right = self.splitBST(root.right, V)
 root.right = left
 return [root, right]
 else:
 left, right = self.splitBST(root.left, V)
 root.left = right
 return [left, root]
Read next

git エイリアス

gitconfig ファイルを編集する vim~ [alias] を強調した設定は次のようになります:

Jul 1, 2020 · 1 min read