一つ、タイトル説明
-
バイナリツリーを考えると、ノードは、ボトムアップ型の値の階層トラバーサルを返します。(すなわち、ルートノードのリーフノードから層への物理層によって、層トラバーサルによって層が左から右へ)
-
たとえば:バイナリツリーを考えます
[3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
そのボトムアップ階層トラバーサルに戻ります:
[
[15,7],
[9,20],
[3]
]
第二に、問題解決のアプローチ
これは、一連の問題です。バイナリツリートラバーサルは、各エリアの要素を分離するために、階層的に共通です。
コアステップは、あなたがそれらの各々の最後の要素を決定する方法である
、我々はキューレベルのバイナリツリートラバーサルを使用することができますを再入力するたびに注意while
サイクルを、キューデータは、この層のノードのバイナリ現在の数です。その後、我々は取るauto len = queue.size()
前に、len
データが追加されるvector
ことに。
第三に、完全なコード
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
queue<TreeNode*> Q;
vector<int> tmp;
vector<vector<int>> sln;
if(!root) return sln;
Q.push(root);
while(!Q.empty()){
auto size = Q.size();
for(int i = 0; i < size; i++){
auto ins = Q.front();
Q.pop();
tmp.push_back(ins->val);
if(ins->left)
Q.push(ins->left);
if(ins->right)
Q.push(ins->right);
}
sln.push_back(tmp);
tmp.clear();
}
reverse(sln.begin(), sln.end());
return sln;
}
};