leetcode 102. Binary Tree Level Order Traversal

题目大意是按层输出节点的值。

主要考虑的是如何判断换层了

1,在最左边的节点做标记

2,使用递归层级就是标记

以下代码是左边节点做标记的

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> preResult;
        vector<int> preResultTmp;
        vector<int> vecTmp;
        queue<TreeNode*> tmp;
        TreeNode * rootTmp;
        TreeNode * midTmp;
        int start,end;
        
        
        if(root == nullptr)
            return preResult;
        
        tmp.push(root);
        preResultTmp.push_back(root -> val);
        midTmp = root;
        
        while(!tmp.empty()){
            rootTmp = tmp.front();
            tmp.pop();
            if(rootTmp == midTmp){
                if(rootTmp -> left != nullptr)
                    midTmp = rootTmp -> left;
                else if(rootTmp -> right != nullptr)
                    midTmp = rootTmp -> right;
                else{
                    midTmp = tmp.front();
                    continue;
                }
                preResult.push_back(preResultTmp);
                preResultTmp = vecTmp;
            }

            if(rootTmp -> left != nullptr){
                tmp.push(rootTmp -> left);
                preResultTmp.push_back((rootTmp -> left) -> val);
            }
            if(rootTmp -> right != nullptr){
                tmp.push(rootTmp -> right);
                preResultTmp.push_back((rootTmp -> right) -> val);
            }
        }
        preResult.push_back(preResultTmp);
        return preResult;
    };
};

 

以下代码是层级标记的

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> preResult;
    vector<vector<int>> levelOrder(TreeNode* root) {
        
        if(root == nullptr)
            return preResult;
        
        widthSearch(root,1);
       
        return preResult;
    };
    void widthSearch(TreeNode* root,int level){
        if(root == nullptr) return;
        if(level > preResult.size())
            preResult.push_back(vector<int>());
        
        preResult[level-1].push_back(root -> val);
        
        widthSearch(root -> left,level+1);
        widthSearch(root -> right,level+1);
    };
};

 

posted @ 2016-04-10 17:59  shijiwomen  阅读(127)  评论(0编辑  收藏  举报