2二分探索木を考える root1
と root2
。
入ったリストを返します すべての整数 から 両方のツリーが 昇順にソートします。
例1:
入力:ROOT1 = [2,1,4]、root2 = [1,0,3] 出力:[0,1,1,2,3,4]
例2:
入力:ROOT1 = [0、-10,10]、root2 = [5,1,7,0,2] 出力:[-10,0,0,1,2,5,7,10]
例3:
入力:ROOT1 = []、root2 = [5,1,7,0,2] 出力:[0,1,2,5,7]
例4:
入力:ROOT1 = [0、-10,10]、root2 = [] 出力:[-10,0,10]
例5:
入力:ROOT1 = [1、NULL、8]、root2 = [8,1] 出力:[1,1,8,8]
制約:
- 各ツリーは、最大であり
5000
、ノード。 - 各ノードの値が間にあります
[-10^5, 10^5]
。
タイトル効果:2つのバイナリ検索ツリーを考えるには、リストの要素の順序を昇順でリストが2つのツリーのノード値で返します。
思考:シーケンスの先行順バイナリ検索ツリーを非減少、我々は最初の2つのバイナリ検索ツリートラバーサルシーケンスの二つの配列を非減少入手することができ、2つの配列が再結合されます。
1 クラスソリューション{ 2 // 先行予約して保存 3。 ボイドトラバース(ツリーノード*根、ベクトル< INT >&V){ 4。 IF(ルート== nullptr A) 5。 復帰; 6 トラバース(ディレクトリroot-> 左、V)。 。7 v.push_back(ディレクトリroot-> ヴァル) 。8 トラバース(ディレクトリroot-> 右、V); 9 } 10 // 2ベクトルをマージ 。11 ベクトル< INT >マージ(ベクトル< 整数 > V1、ベクトル< INT > V2) { 12 ベクター< INT > V(v1.size()+ v2.size())。 13 INTは私= 0、J = 0、インデックス= 0 。 14 一方(I <v1.size()|| J < v2.size()){ 15 であれば((J == v2.size())||(I <v1.size()&& V1 [i]が< = V2 [J])) 16 V [インデックス++] = V1 [I ++ ]。 17 他の 18 V [インデックス++] = V2 [J ++ ]; 19 } 20 リターンV。 21 } 22 公共: 23 ベクトル< 整数 > getAllElements(TreeNodeの* ROOT1、ツリーノード* root2){ 24 // ios_base :: sync_with_stdio(偽); 25の IOS :: sync_with_stdio(偽); 26 cin.tie(NULL)。 27 28 ベクトル< int型 > V1、V2; 29 トラバース(ROOT1、V1)。 30 トラバース(root2、V2)。 31 32 リターンマージ(V1、V2)。 33 } 34 }。
時間の複雑さ:O(n)は、
宇宙複雑:O(n)は、
python3:
1つの #のバイナリツリーノードの定義。 2つの #クラスツリーノード: 3 # DEF __init __(自己、X): 4 # self.val = X 5 # self.left =なし 6 # self.right =なし 7 8 クラスソリューション: 9つの デフDFS(自己、根、ARR ): 10 なら ないルート: 11 リターン 12 self.dfs(root.left、ARR) 13 arr.append(root.val) 14 self.dfs(root.right、ARR) 15 16 DEF getAllElements(自己、ROOT1:ツリーノード、root2:ツリーノード) - > リスト[INT]: 17の #デフDFS(ルート、ANS): 18 # ルートでない場合: 19の # リターン 20の # DFS(root.left、ANS) 21 # ans.append(root.val) 22の # DFS(root.right、ANS) 23 24 LIST1、LIST2 = []、[] 25 self.dfs(ROOT1、LIST1) 26 self.dfs(root2、LIST2) 27 LIST1 .extend(LIST2) 28 list1.sort() 29 戻りリスト1 30 #I、J = 0,0 31 #RES = [] 32 #中にI <lenの(LIST1)またはJ <LEN(LIST2): 33 # IF(J> = LEN(LIST2)または(I <lenの(LIST1 )及び(LIST1 [I] <= LIST2 [J]))): 34 # res.append(LIST1 [i])と 35 # I + = 1 36 # 他: 37 # res.append(LIST2 [J]) 38 # jは+ = 1つの 39 #のリターンRES