您的位置:首页 > 其它

107.Binary Tree Level Order Traversal II

2015-08-02 16:00 423 查看
问题:跟上道102题基本一样,只不过是要求从最下层开始遍历。

思路:多用了一个栈,作为临时结果,最后再把栈的内容搬移到最终结果里即可。

class Solution {

public:

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

        vector<vector<int>> res;

        if(root==NULL) return res;

        stack<vector<int>> tem_res;

        vector<int> layer;

        int cur_layer_num=0,next_layer_num=0;//当前层有多少个节点,下一层有多少个节点。每次出一个节点,当前层就减1,直到0,说明一层结束。每次进一个节点,下一层就加1,直到当前层减为0,下一层计算完毕。

        queue<TreeNode*> q;

        q.push(root);

        cur_layer_num++;

        while(!q.empty()){

            TreeNode* front_node=q.front();

            if(front_node->left){

                q.push(front_node->left);

                next_layer_num++;

            }

            if(front_node->right){

                q.push(front_node->right);

                next_layer_num++;

            }

            layer.push_back(front_node->val);

            q.pop();

            cur_layer_num--;

            if(cur_layer_num==0){

                tem_res.push(layer);

                layer=vector<int>();

                cur_layer_num=next_layer_num;

                next_layer_num=0;

            }

        }

        //反向输出

        while(!tem_res.empty()){

            vector<int> tem_layer=tem_res.top();

            tem_res.pop();

            res.push_back(tem_layer);

        }

        return res;

        

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: