103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树 栈]

来源:互联网 发布:淘宝达人资历说明案例 编辑:程序博客网 时间:2024/05/20 12:49

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree [3,9,20,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

[  [3],  [20,9],  [15,7]]
具体解题思路:要采用之字形按层次遍历树,这里采用了两个栈来完成,由于遍历的时候是交叉从左到右或者从右到左的顺序,所以这里采用了flag来判断当前是应该按照从左到右还是从右到左的顺序。st1保存的是需要从右到左来遍历下一层的节点,st2保存的是需要从左到右来遍历下一层的节点。因此判断的依据就是当st1和st2都为空时整棵树就遍历完成。
class Solution {public:      vector<vector<int>> zigzagLevelOrder(TreeNode* root) {        //vector<int> temp;        vector<vector<int> > result;        if(root == NULL) return result;        stack<TreeNode*> st1;        stack<TreeNode*> st2;        int flag = 0;        st1.push(root);        while(st1.size()!=0 || st2.size() !=0)        {            if(flag == 0 && st1.size()>0)            {                vector<int> temps;                while(st1.size()>0)                {                   TreeNode* temp = st1.top();                   if(temp->left != NULL)                      st2.push(temp->left);                   if(temp->right != NULL)                      st2.push(temp->right);                   st1.pop();                   temps.push_back(temp->val);                }                result.push_back(temps);                flag = 1;            }                        if(flag == 1 && st2.size()>0)            {                vector<int> temps;                while(st2.size()>0)                {                   TreeNode* temp = st2.top();                   if(temp->right != NULL)                      st1.push(temp->right);                   if(temp->left != NULL)                      st1.push(temp->left);                   st2.pop();                   temps.push_back(temp->val);                }                result.push_back(temps);                flag = 0;            }        }        return result;    }};


0 0