バイナリツリートラバーサル結果DFS(NULLが示さ*)指定された、再構成されたバイナリは、ヘッドノードを返します

バイナリツリートラバーサル結果DFS(NULLが示さ*)指定された、再構成されたバイナリは、ヘッドノードを返します。

 

アイデア:最初の*のNULLに、また、ツリーに挿入する*第一、第二の時間を渡します。

*あなたが直接レコードにNULLである場合は、再度ノードは知りません、最後に* NULLが割り当てられ、または独自のNULLが付属しています。

1つの#include <ビット/ STDC ++ H> 
 2  使用して 名前空間STDを、 
3  
4  構造体のTreeNode {
 5      チャーヴァル;
6      のTreeNode * 左;
7      のTreeNode * 右;
8      ツリーノード(チャーNVAL){
 9          ヴァル= NVAL。
10は          =左NULLと、
11          右= NULL;
12      }    
 13  }。 
14  
15のTreeNode *コンストラクト(文字列strの){
 16      もし(str.empty())戻りNULL。
17      
18      スタック<ツリーノード*> TEMP。
19      ツリーノード*ルート= 新しいツリーノード(STR [ 0 ])。    
20      temp.push(ルート)。
21      
22      のためにint型 iは= 1 ; iは<str.sizeを(); iは++ ){
 23          であれば(STR [I]> = ' ' && STR [I] <= ' Z ' ){
 24              のTreeNode * newNode = 新しいですツリーノード(STR [I])。
25 一方(temp.top() - >)は(&& temp.topを左- >             右)temp.pop();
26              
27              であれば(temp.top() - >左== NULL)temp.top() - > =左newNode。
28              他の 場合(temp.top() - >右== NULL){
 29                  temp.top() - >右= newNode。
30              }            
 31              temp.push(newNode)。                        
32          }    
 33          そう であれば(STR [I] == ' * ' ){
 34              のTreeNode * newNode = 新しいツリーノード(STR [I])。
35              であれば(temp.top() - >左== NULL)temp.top() - > =左newNode;
36              他の 場合(temp.top() - >右== NULL){
 37                  temp.top() - >右= newNode。
38                  temp.pop()。
39              } 
 40          }
 41          
42      } 
 43      
44      // 按层遍历、将*改为NULL    
45      キュー<ツリーノード*> QUE。
46      のTreeNode * CUR = NULL;
47      que.push(ルート)。    
48      ながら(!que.empty()){
 49          のintサイズ= que.size()。
50          しばらく(size-- ){
 51              CUR = que.front()。
52              que.pop()。
53              であれば(cur->左&& cur->左>ヴァル== ' * ' ){
 54                  cur->左= NULL;
55              }    
 56              であれば(cur->左&& cur->左>ヴァル=!' * ' ){
 57                  que.push(cur-> 左)。
58              }
 59              
60              もし(cur->右&& cur->右>ヴァル== ' * '                 cur->右= NULL;
62              }
 63              であれば(cur->右&& cur->右>ヴァル=!' * ' ){
 64                  que.push(cur-> 右)。
65              }            
 66          }         
 67      }
 68          
69      リターンルート。
70      
71  } 
 72  
73  空隙検索(ツリーノード*根、文字列RES){
 74      であれば(ルート== NULL){
 75の          RES + = ' * ';
76          リターン;
77      } 
 78  //     RES + = root->ヴァル。
79      検索(root-> 左、RES)。    
80の      RES + = root-> ヴァル。
81      検索(root-> 右、RES)。
82  }
 83  
84  
85  INT メイン(){
 86  //     文字列str = "abdm *** N ** EW ** CF ** G **"。
87      文字列str = " abが* GF ***のC *デ** ** fを" 88      のTreeNode *ルート= 構築物(STR);
89          
90      文字列 アウト ="" ;
91      検索(ルート、アウト)。
92      
93      coutの<< アウト << てendl;
94      
95 }

 

おすすめ

転載: www.cnblogs.com/liugl7/p/11286054.html