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  {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; } };//転載は出所を明記してください。