按之字型顺序打印二叉树

来源:互联网 发布:java buffer 编辑:程序博客网 时间:2024/05/17 22:11

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

这个题目需要借用两个栈进行实现
一个栈保存奇数层从左到右(先保存左孩子再保存右孩子),另一个栈保存偶数层从右到左(先保存右孩子再保存左孩子),每当一个栈为空时进行一次打印下一个栈,一直到两个栈都为空。

重点是能够想到用两个栈。可以用画图进行分析。利用队列无法实现。这个和bfs还是有区别的。

/*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) {        if(pRoot==NULL)            return vector<vector<int>>{};        vector<vector<int> > res;        vector<int> vec;        stack<TreeNode*> *sta=new stack<TreeNode*>[2];        sta[0].push(pRoot);        while(!sta[0].empty()||!sta[1].empty())            {            while(!sta[0].empty()){            TreeNode* temp=sta[0].top();            vec.push_back(temp->val);            sta[0].pop();            if(temp->left)                 sta[1].push(temp->left);            if(temp->right)                 sta[1].push(temp->right);             }            if(!vec.empty())            res.push_back(vec);            vec.clear();            while(!sta[1].empty()){            TreeNode* temp=sta[1].top();            vec.push_back(temp->val);            sta[1].pop();            if(temp->right)                 sta[0].push(temp->right);            if(temp->left)                 sta[0].push(temp->left);              }            if(!vec.empty())            res.push_back(vec);            vec.clear();        }       return res;     }};
0 0
原创粉丝点击