Binary Tree Level Order Traversal
http://blog.csdn.net/shiquxinkong/article/details/17758471
Given a binary tree,return the level order trversal of its nodes'values.(e,from left to right,level by level)
For example:Given binary tree
これで私たちの関数の原形が出ます。
まず、私たちはツリー全体の高さを計算しに行きませんでした。それでは、事前に正確なvivecという実際の参の大きさを設定することができません。backは1階に1階を追加します。いつから新しい階になりますか?私達はvivec.size()
Given a binary tree,return the level order trversal of its nodes'values.(e,from left to right,level by level)
For example:Given binary tree
{3,9,20,#,#,15,7}
、 3
/ \
9 20
/ \
15 7
return its level order trversal as:[
[3],
[9,20],
[15,7]
]
私達は深さ優先でこの問題を処理します。これで再帰的に簡単に利用できます。プログラムがより明確で簡明で、人間の思考パターンに合います。DFSでは、現在の深さ値を記録します。現在の層の結点val情報を保存したいので、再帰的な関数では、現在の層を表すパラメータが必要です。これ以外に、最終結果を保存するパラメータの参照が必要です。もちろん、引用しなくてもいいです。このパラメータをメンバー変数の形で設定します。もしこれがあげられないなら、クラス全体の変数を教えてくれないでしょう。だから、私達はやはりパラメーターの引用の形式を選択します。一つの関数の機能だけから、全種類の家族に変数を与えます。もちろん、rootパラメータは必須です。これで私たちの関数の原形が出ます。
void levelNode(TreeNode *root, int level,vector<vector<int> >& vivec )
はこのような形式であるべきです。次に私達はどうやってroot代表のval値をvivec対応の位置に入れるべきですか?まず、私たちはツリー全体の高さを計算しに行きませんでした。それでは、事前に正確なvivecという実際の参の大きさを設定することができません。backは1階に1階を追加します。いつから新しい階になりますか?私達はvivec.size()
class Solution {
public:
void levelNode(TreeNode *root, int level,vector<vector<int> >& vivec )
{
if(!root) return;
if(level > vivec.size())
vivec.push_back(vector<int>());
vivec[level - 1].push_back(root->val);
levelNode(root->left,level + 1, vivec);
levelNode(root->right, level + 1, vivec);
}
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > vivec;
int level = 1;
levelNode(root,level,vivec);
return vivec;
}
};
//転載は出所を明記してください。