タイトル説明
他の行では、印刷の右の順に、左から右、右から左に印刷するために、第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 }。