每日一练,

Given a binary tree, return the level order traversal of its nodes' values. (ie, 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 traversal as:

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

 

 

 

 

代码如下:

class Solution {

public:

    int level(TreeNode *node)

    {

        if (node == NULL) return 0;

        if (node->left == NULL && node->right == NULL) return 1;

        return max(level(node->left),level(node->right)) + 1;

    }

    void levelPush(TreeNode *node, int height, vector<int> &vec, int cur_height){

        if (height == cur_height) vec.push_back(node->val);

        if (node->left != NULL) levelPush(node->left, height, vec, cur_height + 1);

        if (node->right != NULL) levelPush(node->right, height, vec, cur_height + 1);

    }

    vector<vector<int> > levelOrder(TreeNode *root) {

        int height = level(root);

        vector<vector<int> > vvec;

        for(int i = 1;i <= height;i++)

        {

            vector<int> vec;

            levelPush(root, i, vec, 1);

            vvec.push_back(vec);

        }

        return vvec;

    }

};