美文网首页
按之字形顺序打印二叉树

按之字形顺序打印二叉树

作者: Crazy_Bear | 来源:发表于2020-07-24 11:05 被阅读0次
  • 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
  • 使用两个栈,记为st_1(存储正向打印的数据), st_2(存储逆向打印的数据),打印方向必然与存储顺序相反
    • 当打印方向为正向时,即从st_1出栈时,st_2应当按序存储每个点的孩子节点,切先存储左孩子,再存右孩子
    • 当打印方向为逆向时,即从st_2出栈时,st_1应当按序存储每个点的孩子节点,切先存储右孩子,再存左孩子
    • 一次正向打印和一次逆向打印为一次循环
  • C++ 代码
/*
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) {
        vector<vector<int>> res;
        vector<int> tmp;
        if(!pRoot) return res;
        stack<TreeNode *> q;
        stack<TreeNode *> s;
        q.push(pRoot);
        while(!q.empty()||!s.empty()){
        while(!q.empty()){
            tmp.push_back(q.top()->val);
            TreeNode * left = q.top()->left;
            TreeNode * right = q.top()->right;
            if(left)
            s.push(left);
            if(right)
            s.push(right);
            q.pop();
        }
            res.push_back(tmp);
            tmp.clear();
         while(!s.empty()){
            tmp.push_back(s.top()->val);
            TreeNode * left = s.top()->left;
            TreeNode * right = s.top()->right;
            if(right)
            q.push(right);
            if(left)
            q.push(left);
            s.pop();
        }
            if(!tmp.empty())
            res.push_back(tmp);
            tmp.clear();
        }
        return res;
    }  
};

相关文章

  • JZ-059-按之字形顺序打印二叉树

    按之字形顺序打印二叉树 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从...

  • 打印二叉树

    按之字形顺序打印二叉树 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺...

  • 剑指offer | 按之字形顺序打印二叉树

    按之字形顺序打印二叉树 请实现一个函数按照之字顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的...

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

  • 剑指offer编程题—按之字形打印二叉树

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

  • 面试题32 - III. 从上到下打印二叉树 III

    题目描述: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,...

  • 面试题32-3.从上到下打印二叉树3_hn

    题目描述 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第...

  • 剑指offer 33- 之字形打印二叉树

    请实现一个函数按照之字形顺序从上向下打印二叉树。 即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第...

  • Java日记2018-06-04

    32.3 按之字形顺序打印二叉树上一题的扩展,使用辅助的队列 和栈来实现,注意一下注释里面顺序的坑 二叉搜索树的后...

网友评论

      本文标题:按之字形顺序打印二叉树

      本文链接:https://www.haomeiwen.com/subject/nyhjlktx.html