剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)

简介: 剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)

题目描述:

给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)

数据范围:0≤n≤1500,树上每个节点的val满足∣val∣<=100

要求:空间复杂度:O(n),时间复杂度:O(n)

例如:

给定的二

该二叉树之字形层序遍历的结果是

[

[1],

[3,2],

[4,5]

]

叉树是{1,2,3

示例:

输入:

{1,2,3,#,#,4,5}


返回值:

[[1],[3,2],[4,5]]


说明:

如题面解释,第一层是根节点,从左到右打印结果,第二层从右到左,第三层从左到右。

解题思路:

#,#,4本题考察数据结构树的使用。运用队列先进先出的特点解决该问题,执行到某一层时,将当前层的数值放入vector中保留,再将结点指针弹出队列,存入其下一层结点指针至队列;每层进行奇偶判断,偶数层对vector反转,将该层的vector放入vector<vector<int>>中;最终就实现了之字形的顺序打印。

测试代码:

/*
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>> v;
        if(!pRoot)
            return v;
        queue<TreeNode*> q;
        q.push(pRoot);
        int l=0;
        // 遍历所有结点
        while(!q.empty())
        {
            int size=q.size();
            vector<int> a;
            // 遍历存放左右子树结点
            while(size--)
            {
                TreeNode* n=q.front();
                q.pop();
                a.push_back(n->val);
                if(n->left)
                    q.push(n->left);
                if(n->right)
                    q.push(n->right);
            }
            l++;
            // 如果l是偶数层,则将vector反转
            if(l%2==0)
                reverse(a.begin(), a.end());
            v.push_back(a);
        }
        return v;
    }
};


相关文章
|
6天前
|
算法 编译器 C语言
数据结构——二叉树四种遍历的实现-3
数据结构——二叉树四种遍历的实现
数据结构——二叉树四种遍历的实现-3
|
6天前
|
存储
数据结构——二叉树四种遍历的实现-2
数据结构——二叉树四种遍历的实现
数据结构——二叉树四种遍历的实现-2
|
6天前
|
机器学习/深度学习
数据结构——二叉树四种遍历的实现-1
数据结构——二叉树四种遍历的实现
数据结构——二叉树四种遍历的实现-1
|
6天前
|
算法 Go 数据库
数据结构/C++:位图 & 布隆过滤器
数据结构/C++:位图 & 布隆过滤器
13 0
|
6天前
|
存储 算法 C++
数据结构/C++:哈希表
数据结构/C++:哈希表
11 2
|
6天前
|
存储 算法 Java
数据结构/C++:红黑树
数据结构/C++:红黑树
15 3
|
6天前
|
存储 算法 C++
数据结构/C++:AVL树
数据结构/C++:AVL树
10 2
|
6天前
|
存储 C语言 C++
数据结构/C++:二叉搜索树
数据结构/C++:二叉搜索树
13 1
|
6天前
【数据结构】二叉树的三种遍历(非递归讲解)
【数据结构】二叉树的三种遍历(非递归讲解)
11 1
|
6天前
|
存储
【数据结构】二叉树相关oj题(一)
【数据结构】二叉树相关oj题(一)
11 1