leetcode-107-Binary Tree Level Order Traversal II

来源:互联网 发布:excel重复数据合并求和 编辑:程序博客网 时间:2024/06/06 05:34

问题

题目:[leetcode-107]

思路

层序遍历。
但是要保存每一层的节点。所以关键就是标记每一层的节点,
引入每一层最右端节点last。对于出队后的节点进行判断,如果是last。证明已经访问完本层所有节点,队列中目前的节点全部是下一层的节点。此时更新last即可。

代码

/** * 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>> levelOrderBottom(TreeNode* root) {        std::vector<std::vector<int>> ret;        if(!root) return ret;        std::stack<std::vector<int>> stk;        std::vector<int> cur_lev;        std::queue<TreeNode*> que;        que.push(root);        TreeNode* last = que.back(); // 记录当前层次的最后一个节点        while(!que.empty()){            TreeNode* p = que.front();            que.pop();            cur_lev.push_back(p->val);            if(p->left)                que.push(p->left);            if(p->right)                que.push(p->right);            if(p == last){//访问到当前层最后一个节点                stk.push( cur_lev );                cur_lev.clear();                last = que.back();            }        }        while(!stk.empty()){            ret.push_back(stk.top());            stk.pop();        }        return ret;    }};
0 0
原创粉丝点击