【简单】Lintcode 69:Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

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]
]
Challenge 

Challenge 1: Using only 1 queue to implement it.

Challenge 2: Use DFS algorithm to do it.

解题思路:

    利用一个队列来辅助层级遍历,先将root push进队列,再pop出来,将当前pop出的元素存进vector中,考察当前队列front元素是否有左右孩子,若有则将其左右孩子push进队列中,循环操作,直到队列为空,则表明所有元素都按照层级关系存进vector中。

    注意本题需要的结果是保存在一个二维数组中,每一个层级的数据占据一行,所以单独对层级加一个一维数组temp暂存,再将temp存进result二维数组中。

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: A Tree
     * @return: Level order a list of lists of integer
     */

    vector<vector<int>> levelOrder(TreeNode * root) 
    {
        // write your code here
        vector<vector<int>> result;
        
        if(root == NULL) return result;

        queue<TreeNode *> q;//队列辅助
        q.push(root);
        
        while(!q.empty())
        {
            vector<int> temp;
            int len = q.size();
            
            while(len--)//因为是二维数组,每一行都是一个单独的层级,所以用temp来暂存每一层数据
            {
                TreeNode * node = q.front();
                q.pop();
            
                temp.push_back(node->val);  
                
                if(node->left != NULL)
                    q.push(node->left);
                if(node->right != NULL)
                    q.push(node->right);
            }
            
            result.push_back(temp);//一层一层push进二维数组得到结果    
        }
        
        return result;
    }
};


猜你喜欢

转载自blog.csdn.net/majichen95/article/details/80297008