縦314バイナリツリートラバーサル

トピック:

リンク:https://leetcode-cn.com/problems/binary-tree-vertical-order-traversal/

 

バイナリツリーのノードに戻り、所与の  垂直方向のトラバースの値(行によって上から下へ、行)。

同一の行および列内の2つのノード場合、それが正しい順序に放置しました。

例1:

入力:[3,9,20,null,null,15,7]

   3 
  / \ 
 / \ 
920 
    / \ 
   / \ 
  157 

出力:

[ 
  [9]、
  [3,15]、
  [20]、
  [7] 
]

例2:

入力:[3,9,8,4,0,1,7]

     3 
    / \ 
   / \ 
  98 
  / \ / \ 
 / \ / \ 
4017 

出力

  [ [4]、
  [9]、
  [3,0,1]、
  [8]、
  [7] 
]

例3:

入力:[3,9,8,4,0,1,7,null,null,null,2,5](注意:右の子ノードが左の子ノード0 2,1 5)であり、

     3 
    / \ 
   / \ 
   98 
  / \ / \ 
 / \ / \ 
 4017 
    / \ 
   / \ 
   52 

:出力

[ 
  [4] [9,5]、
  [3,0,1]、
  [8,2]、
  [7] 
]

回答:

最近、春動くすべてのC ++コンピュータ・ネットワーク・オペレーティング・システムを処理するために準備された、質問を磨くなかった長い時間のために持っているし、その後緩やかな問題は通常、関連するとレベルを通過する必要があり、長い時間のために考えたくはありませんされていますが、具体的なアイデアをされていない持っています。いきなり答えを実現し、他の人々を読みます

横ノードの最終的な位置を示す垂直トラバースは、これは一般的に意味してもよいです。

 

 

大小規模から深さが、そうBFSレベルをトラバース考えます。最初のいくつかの層トラバーサルので、その後、より自然な条件が満たされるにはあまりから層、深さの多数を横切ります。

もちろん、DFSを使用してもよいが、パラメータDFSは軽い表示最終ノードの最終行に、より深い前部横断ノードを防止するために、層の現在の数を保存します。

また、子どもたちに参加する各列の左から右へ、限り、我々は階層順を横断するこのの制限として、右にも左から同じ行に残されており、右の子供たちは、この制約を満たすために。

 

BFSコード:

/ * * 
 *バイナリツリーノードの定義。
 *構造体のTreeNode { 
 * INTヴァル。
 *のTreeNode *左; 
 *のTreeNode *右; 
 *ツリーノード(INT X):ヴァル(x)は、左(NULL)、右(NULL){} 
 *}。
 * / 
クラスソリューション{
 パブリック
    ベクトル <ベクトル< INT >> verticalOrder(ツリーノード* ルート){
         場合(ルート== nullptr){
             リターン{}。
        } 
        ベクトル <ベクトル< 整数 >> RES。
        マップ < int型、ベクトル< int型>> メモ。
        キュー <TreeNodeの*> data_queue。
        キュー < 整数 > coordinate_queue。
        data_queue.push(ルート)。
        (coordinate_queue.push 0 )。
        ツリーノード * CUR = nullptr;
        int型cur_coor;
        一方、(ないdata_queue.empty()){ 
            CUR = data_queue.front()、cur_coor = coordinate_queue.front()。
            data_queue.pop())(coordinate_queue.pop。
            メモ[cur_coor] .emplace_back(CUR - >ヴァル)// CUR的值记录在横坐标为cur_coor的数组中
            であれば(cur->左){ 
                data_queue.push(CUR - > 左)。
                coordinate_queue.push(cur_coor - 1 )。
            } 
            であれば(cur-> 右){ 
                data_queue.push(CUR - > 右)。
                coordinate_queue.push(cur_coor + 1 )。
            } 
        } 
        のための(自動&ペア:メモ){ 
            res.emplace_back(ムーブ(pair.second))。
        } 
        戻りRES。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12456167.html