按之字形顺序打印二叉树

2020-04-25  本文已影响0人  su945

题目描述

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

问题分析

利用栈的性质,后进先出实现逆序打印。
同时区别奇偶不同的函数

解题思路1

class Solution {
public:
        vector<vector<int> > Print(TreeNode* pRoot) {
            vector<vector<int>> ret;
            if(pRoot==NULL) return ret;
            stack<TreeNode*> s1;
            stack<TreeNode*> s2;
            s1.push(pRoot);
            while(!s1.empty()||!s2.empty()){
                vector<int> v1;
                vector<int> v2;
                while(!s1.empty()){
                    v1.push_back(s1.top()->val);
                    if(s1.top()->left!=NULL) s2.push(s1.top()->left);
                    if(s1.top()->right!=NULL) s2.push(s1.top()->right);
                    s1.pop();
                }
                if(v1.size()!=0)
                ret.push_back(v1);
                while(!s2.empty()){
                    v2.push_back(s2.top()->val);
                    if(s2.top()->right!=NULL)   s1.push(s2.top()->right);
                    if(s2.top()->left!=NULL)  s1.push(s2.top()->left);
                    s2.pop();
                }
                if(v2.size()!=0)
                ret.push_back(v2);
            }
            return ret;
        }
};
上一篇下一篇

猜你喜欢

热点阅读