题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

思路还是层次遍历:
对于之字形,我用的是栈来处理,栈用来反向输出。当然还可以用reverse函数。
代码:

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        int num = 1;
        vector<vector<int>> ret;
        queue<TreeNode*> q;
        stack<TreeNode*> st;
        if(!pRoot) return ret;
        q.push(pRoot);

        while(!q.empty() || !st.empty()){
            int sq = q.size();
            int ss = st.size();
            vector<int> ans;
            if(num%2 == 1){
                while(sq--){
                    TreeNode* node = q.front();
                    q.pop();
                    ans.push_back(node->val);
                    if(node->left) st.push(node->left);
                    if(node->right) st.push(node->right);
                    if(node->left) q.push(node->left);
                    if(node->right) q.push(node->right);
                }
                ret.push_back(ans);
            }
            else{
                while(ss--){
                    TreeNode* node = st.top();
                    st.pop();
                    ans.push_back(node->val);
                    TreeNode* node1 = q.front();
                    q.pop();
                    if(node1->left) q.push(node1->left);
                    if(node1->right) q.push(node1->right);
                }
                ret.push_back(ans);
            }
            num++;
        }
        return ret;
    }

};
全部评论

相关推荐

头像
10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务