Leetcode:スプリットBST

ルート・ノードのルート、及び目標値Vとバイナリ検索ツリー(BST)与えられた一つのサブツリーは、すべてのより小さな又は目標値に等しいノードを持つ2つのサブツリーにツリーを分割しながら、他のサブツリーであるすべてのノードを有します目標値よりも大きいです。それは必ずしもツリーは値Vを持つノードが含まれている場合ではありません
 
さらに、オリジナルの木の構造の大部分が残っているはずです。正式には、のためにオリジナルのツリー内の親Pを持つすべての子C、場合、彼らは両方とも、分割後の同じサブツリーにある場合、ノードCは、まだ親P.を持っている必要があり

ます出力すべきいずれかに分割した後、両方のサブツリーのルートTreeNodeを、注文。
 1:
入力:ルート= [4,2,6,1,3,5,7]、V = 2 
出力:[2,1]、[4,3,6、NULL、NULL、5,7] 
説明:
TreeNodeオブジェクト、ない配列である[1]その根、出力[0]、及び出力に注意してください。

所与のツリー[4,2,6,1,3,5,7]は以下の図で表されている:

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

を出力するための図である間:

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

 

注意:

  1. BSTのサイズが超えることはありません  50
  2. BSTは常に有効であり、各ノードの値が異なっています。
 

 

再帰:

難しい部分はrecurionロジックを見つける方法であります

ましょう  res[0] 、木よりも小さいかVに等しくなるよう  res[1] V.よりも大きい木も

詳細説明:まず第一に、我々は(より大きなサブツリーで以下のサブツリーのいずれかで)与えられたルートは、答えに常にあることがわかります。その後、場合  root->val > V、サブツリー内のいくつかの部分木があるという可能性があり  root->left 、そのサブツリーが接続する必要がVよりも多分大きいとは  root->left今、私たちは「内のサブツリーsplitingのこの問題ことがわかり  root->left Vを使用したが、」分割の現在の問題と同じです  rootだから我々は左側に再帰し、必要な結果を得ることができます。です心配することの一つは、にはサブツリー何がある場合は  root->left それがVよりも大きくありませんか?この場合は、ベースケースによって自動的に処理されます。
同様の議論は、ケースにも適用されます  root->val <= V

1  / ** 
2  分木のノードのための*の定義。
3  *パブリッククラスツリーノード{
 4  * int型のval;
5  *のTreeNodeは左。
6  *のTreeNodeは正しいです。
7  *ツリーノード(INT X){ヴァル= X。}
 8  *}
 9   * / 
10  クラスソリューション{
 11      公共のTreeNode [] splitBST(ツリーノードのルート、int型V){
 12の         // RES [0] RESのツリーのルート<= V、およびその逆である[1] 
13          ツリーノード[] RES = 新しいツリーノード[2 ]。 
14          もし(ルート== NULL戻りRES。
15          
16          であれば(root.val> V){
 17の              RES [1] = 根。
18              ツリーノード[]左側= splitBST(root.left、V)。
19              root.left =左側[1 ]。
20の              RES [0] =左側[0 ]。
21          }
 22           { // root.val <= V 
23の              RES [0] = 根。
24              ツリーノード[] rightSide = splitBST(root.right、V)。
25             root.right = rightSide [0 ]。
26の              RES [1] = rightSide [1 ]。
27          }
 28の         
29          戻りRES。
30      }
 31 }

 

おすすめ

転載: www.cnblogs.com/EdwardLiu/p/11698350.html
おすすめ