オファーの表面安全な質問を証明する。印刷バイナリのジグザグ順

タイトル説明

他の行では、印刷の右の順に、左から右、右から左に印刷するために、第2の層の第一の印刷ライン、第三行に左ジグザグプリント機能バイナリツリー、すなわち、に従って実施前後。
 

方法1:

通常は、共通キューを使用して、レベルを通過します。すべての奇数ライン(0から数えて)は、逆層の結果を置きます。

1  クラスソリューション{
 2  公共3      ベクトル<ベクトル< 整数 >>印刷(ツリーノード* PROOT){
 4          もし(PROOT == nullptr){ リターン{};}
 5          キュー<ツリーノード*> MY_QUEUE。
6          my_queue.push(PROOT)。
7          ベクトル<ベクトル< int型 >> RES。
8          ベクトル< 整数 > VEC。
9          INT CNT = 0 10          一方(ないmy_queue.empty()){
 11              vec.clear();
12              INT cur_siz = my_queue.size()。
13              のためにINT iは= 0 ; I <cur_siz ++ {I)
 14                  オートCUR = my_queue.front()。
15                  my_queue.pop()。
16                  vec.push_back(cur-> ヴァル)
17                  であれば(cur-> 左){
 18                      my_queue.push(cur-> 左)。
19                  }
 20                  であれば(cur-> 右){
 21                      my_queue.push(cur-> 右)。
22                  }
23              }
 24              であれば(CNT&1 ){
 25                  逆(vec.begin()、vec.end())。
26              }
 27              res.push_back(VEC)。
28              ++ CNT。
29          }
 30          リターンRES。
31      }
 32 }。

 

方法2:

両端キューを使用して、キューは常に通常のオーダーであるが、左横に右、右ポップ、左の子にプッシュから奇数行。左から右にトラバースの偶数ラインは、子どもたちが右に押し、左ポップ。

1  クラスソリューション{
 2  公共3      ベクトル<ベクトル< 整数 >>印刷(ツリーノード* PROOT){
 4          もし(PROOT == nullptr){ リターン{};}
 5          デック<ツリーノード*> MY_QUEUE。
6          my_queue.push_back(PROOT)。
7          ベクトル<ベクトル< int型 >> RES。
8          INT CNT = 0 9          一方(ないmy_queue.empty()){
 10              res.push_back({})。
11              INT cur_siz = my_queue.size()。
12              decltype(PROOT)CUR。
13              のためにINT iは= 0 ; I <cur_siz; ++ I){
 14                  であれば(CNT&1 ){
 15                      CUR = my_queue.back()。
16                      my_queue.pop_back()。
17                      であれば(cur-> 右){
 18                          my_queue.push_front(cur-> 右)。
19                      }
 20                      であれば(cur-> 左){
 21                          my_queue.push_front(cur-> 左)。
22                     }
 23                  }
 24                  {
 25                      CUR = my_queue.front()。
26                      my_queue.pop_front()。
27                      であれば(cur-> 左){
 28                          my_queue.push_back(cur-> 左)。
29                      }
 30                      であれば(cur-> 右){
 31                          my_queue.push_back(cur-> 右)。
32                      }
 33                  }
 34                  。res.back()一back(cur-> ヴァル)
35              }
 36              ++ CNT。
37          }
 38          リターン何か。
39      }
 40 }。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12306131.html
おすすめ