刷题 - 按之字形打印二叉树

题目描述:

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

解题思路:

从题目分析可知,题目的意思是:从上到下,单数行从左到右打印,双数行从右到左打印,这就需要我们在求解过程中要记住当前打印的是单数行还是奇数行。

考虑设置两个辅助栈空间,分别用于存放单数行的数据和双数行的数据,根据层序遍历的思想:遍历某一行时,可以直接将下一行的内容缓存,由此得到处理流程思路:

                                     

对上面这个二叉树:

初始化1入单行栈,1出栈时,需要将1按照左节点进栈、右节点进展的顺序,将其子节点压入双行栈,这样后续双行栈出栈时,出栈顺序为从右到左。

双行栈出栈时,同样边出栈,边将子节点入单行栈,但是入栈顺序是:先入右节点,再入左节点,这样后续单行栈出栈时,出栈顺序为从左到右。

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> res;
        if(pRoot == NULL)
            return res;
        stack<TreeNode*> s_single;//临时存放单层的数据
        stack<TreeNode*> s_double;//临时存放双层的数据
        //初始为1层
        int layer = 1; 
        s_single.push(pRoot);
        while(!s_single.empty() || !s_double.empty()){
            //双层
            if(layer%2 != 0){
                vector<int> v_single;
                while(!s_single.empty()){
                    TreeNode* tmp = s_single.top();
                    v_single.push_back(tmp->val);
                    s_single.pop();
                    if(tmp->left){
                        s_double.push(tmp->left);
                    }
                    if(tmp->right){
                        s_double.push(tmp->right);
                    }
                }
                res.push_back(v_single);
                layer++;
            }
            //单层
            else{
                vector<int> v_double;
                while(!s_double.empty()){
                    TreeNode* tmp = s_double.top();
                    v_double.push_back(tmp->val);
                    s_double.pop();
                    if(tmp->right){
                        s_single.push(tmp->right);
                    }
                    if(tmp->left){
                        s_single.push(tmp->left);
                    }
                }
                res.push_back(v_double);
                layer++;
            }
        }
        return res;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章