BST(無効出力コンテナマップ[不在の数])に1115個のカウントノード

トピック:https://pintia.cn/problem-sets/994805342720868352/problems/994805355987451904

一般タイトルシーケンス、バイナリ検索ツリー構造、出力ノードと最大深さ及び最大深度ビューの数を与えることを意図しています。

この方法、BFS

1の#include <iostreamの>
 2の#include <unordered_map>
 3の#include <キュー>
 4の#include <アルゴリズム>
 5  使用して 名前空間をSTD。
6  
7  構造体ノード{
 8      int型データ、レベル。
9      ノード* lchild。
10      ノード* rchild。
11  }。
12  
13  空隙インサート(ノード*&ルート、int型データ){
 14      であれば(ルート== NULL){
 15          ルート= 新しいノード。
16         root->データ= データ。
17          root-> lchild = root-> rchild = NULL;
18      } そう であれば(データ<= root->データ)インサート(root-> lchild、データ)。// 此题BST定义
19      のインサート(root-> rchild、データ);
20  }
 21  
22 unordered_map < INTINT > 融点;
23  INT maxlevel = - 1 24の ボイド BFS(ノード* ルート){
 25      キュー<ノード*> Q。
26      root->レベル= 1 27      q.push(ルート)。
28      ながら(!{q.empty())
 29          ノード・ノード= q.front()。
30          MP [ノード- >レベル] ++ ;
31          maxlevel = MAX(maxlevel、ノード- > レベル)。
32          q.pop()。
33          であれば(ノード- > lchild!= NULL){
 34              ノード- > lchild->レベル=ノード- >レベル+ 1 35              q.push(ノード- > lchild)。
36          }
 37          であれば(ノード- > rchild!= NULL){
 38              ノード- > rchild->レベル=ノード- >レベル+1 ;
39              q.push(ノード- > rchild)。
40          }
 41      }
 42  }
 43  INT メイン(){
 44      、INT 、N、T。
45      CIN >> N。
46      ノード*ルート= NULL;
47      のためにINT iは= 0 ; I <N ++ {I)
 48          CIN >> T。
49          インサート(根、T)。
50      }
 51      BFS(ルート)。
52      のprintf(" %D +%のD =%dの",mp[maxlevel],mp[maxlevel-1],mp[maxlevel]+mp[maxlevel-1]);
53     return 0;
54 }

方法2、DFS

1の#include <iostreamの>
 2の#include <unordered_map>
 3の#include <キュー>
 4の#include <アルゴリズム>
 5  使用して 名前空間をSTD。
6  
7  構造体ノード{
 8      int型データ、レベル。
9      ノード* lchild。
10      ノード* rchild。
11  }。
12  
13  空隙インサート(ノード*&ルート、int型データ){
 14      であれば(ルート== NULL){
 15          ルート= 新しいノード。
16         root->データ= データ。
17          root-> lchild = root-> rchild = NULL;
18      } そう であれば(データ<= root->データ)インサート(root-> lchild、データ)。// 此题BST定义
19      のインサート(root-> rchild、データ);
20  }
 21  
22 unordered_map < INTINT > 融点;
23  INT maxlevel = - 1 24の ボイド DFS(ノード*ルート、INT レベル){
 25      であれば(ルート== NULL){
 26         maxlevel = MAX(maxlevel、、レベル1 )。
27          リターン;
28      }
 29      MP [レベル] ++ ;
30の      DFS(root-> lchild、レベル+ 1 )。
31の      DFS(root-> rchild、レベル+ 1 )。
32  }
 33  、INT (){主
 34      INT N、T。
35      CIN >> N。
36      ノード・ルート= NULL;
37      のためにINT iは= 0 ; I <N ++ {I)
 38          CIN >> T。
39         インサート(根、T)。
40      }
 41      DFS(ルート、1 );
42      のprintf(" %のD +%のD =%dの"、MP [maxlevel]、MP [maxlevel- 1 ]、MP [maxlevel] + MP [maxlevel- 1 ])。
43      リターン 0 44 }

 

おすすめ

転載: www.cnblogs.com/keep23456/p/12538667.html