之字形打印二叉树

问题最关键的是用了栈和队列两个数据结构。在层次遍历的过程中,同时将节点保存到栈中。

vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
    vector<vector<int>> result;
    if(root==NULL)   return result;
    vector<int> tempRes;
    stack<TreeNode *>st;
    queue<TreeNode *>que;
    que.push(root);
    TreeNode *last=root,*temp=root;
    tempRes.push_back(root->val);
    result.push_back(tempRes);
    tempRes.clear();
    while(!que.empty()){
        temp=que.front();
        if(temp->left){
            que.push(temp->left);
            st.push(temp->left);
        }
        if(temp->right){
            que.push(temp->right);
            st.push(temp->right);
        }
        if(temp==last){
            while(!st.empty()){
                TreeNode *t=st.top();
                tempRes.push_back(t->val);
                st.pop();
            }
            if(tempRes.size()>0)
                result.push_back(tempRes);
            last=que.back();
            tempRes.clear();
        }
        que.pop();
    }
    return result;
}

 

posted @ 2016-09-13 21:07  胖子到瘦子  阅读(193)  评论(0编辑  收藏  举报