之字形打印二叉树

按之字形顺序打印二叉树

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

之字形打印二叉树,可以使用两个栈来存储数据,栈1存储奇数层结点数据,栈2存储偶数层计点数据。奇数层从左到右打印,即栈1出栈,栈2按先左孩子,后右孩子入栈;偶数层从右往左打印,即栈1出栈,栈2按先右孩子,后左孩子入栈。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> vec;
        vector<int> v;
        if(pRoot == nullptr){
            return vec;
        }
        //奇数层,从右到左入栈,从左到右输出
        stack<TreeNode*> l_stack;
        //偶数层,从左到右入栈,从右到左输出
        stack<TreeNode*> r_stack;
        TreeNode* pNode = pRoot;
        l_stack.push(pNode);
        while(!l_stack.empty() || !r_stack.empty()){
            while(!l_stack.empty()){
                pNode = l_stack.top();
                v.push_back(pNode->val);
                l_stack.pop();
                if(pNode->left != nullptr){
                    r_stack.push(pNode->left);                    
                }
                if(pNode->right != nullptr){
                    r_stack.push(pNode->right);
                }
            }
            if(!v.empty()){
                vec.push_back(v);
                v.clear();
            }           

            while(!r_stack.empty()){
                pNode = r_stack.top();
                v.push_back(pNode->val);
                r_stack.pop();
                if(pNode->right != nullptr){
                    l_stack.push(pNode->right);
                }
                if(pNode->left != nullptr){
                    l_stack.push(pNode->left);                    
                }
            }
            if(!v.empty()){
                vec.push_back(v);
                v.clear();
            }     
        }
        return vec;
    }

};
全部评论

相关推荐

Noel_:中石油是这样的 哥们侥幸混进免笔试名单 一看给我吓尿了
点赞 评论 收藏
分享
10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务