【LeetCode】剑指 Offer(15)

简介: 【LeetCode】剑指 Offer(15)

题目:剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(Leetcode)


题目的接口:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector> levelOrder(TreeNode* root) {
    }
};


解题思路:

我们可以利用队列先进先出的特性,


用队列来存放二叉树节点,



然后每次遍历二叉树的一层节点,


每层遍历的时候用数组存起来,然后放进二维数组,


每层都用新的数组村节点值即可。


代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        //建一个队列
        queue q;
        TreeNode* cur = root;
        int qsize = 0;
        //先把根节点入队
        if(root)
        {
            q.push(root);
            qsize++;
        }
        vector> vv;
        //循环到不再有节点入队
        while(!q.empty())
        {
            //每次初始化新数组
            vector v;
            //循环该层的节点数
            while(qsize--)
            {
                //节点出队,节点值打印
                TreeNode* front = q.front();
                q.pop();
                v.push_back(front->val);
                //左右孩子入队
                if(front->left)
                {
                    q.push(front->left);
                }
                if(front->right)
                {
                    q.push(front->right);
                }
            }
            //该层的节点数
            qsize = q.size();
            vv.push_back(v);
        }
        return vv;
    }
};

过啦!!!


题目:剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(Leetcode)


题目的接口:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector> levelOrder(TreeNode* root) {
    }
};


解题思路:

这道题其实是上一道题的一个变式练习,


整体框架和思路是一样的,


我们只需要根据题意,将双数层的数组反转再打印即可。


代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        //建一个队列
        queue q;
        TreeNode* cur = root;
        int qsize = 0;
        int cnt = 0;
        //先把根节点入队
        if(root)
        {
            q.push(root);
            qsize++;
        }
        vector> vv;
        //循环到不再有节点入队
        while(!q.empty())
        {
            //每次初始化新数组
            vector v;
            //记录层数
            cnt++;
            //循环该层的节点数
            while(qsize--)
            {
                //节点出队,节点值打印
                TreeNode* front = q.front();
                q.pop();
                v.push_back(front->val);
                //左右孩子入队
                if(front->left)
                {
                    q.push(front->left);
                }
                if(front->right)
                {
                    q.push(front->right);
                }
            }
            //该层的节点数
            qsize = q.size();
            //层数为双数的时候反转一下数组就行
            if(cnt % 2 == 0)
            {
                reverse(v.begin(), v.end());
            }
            vv.push_back(v);
        }
        return vv;
    }
};

过啦!!!


写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


如果喜欢本文的话,欢迎点赞和评论,写下你的见解。


如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。


之后我还会输出更多高质量内容,欢迎收看。


相关文章
|
9天前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
18 1
|
21天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
21 0
|
21天前
|
Go
golang力扣leetcode 剑指Offer II 114. 外星文字典
golang力扣leetcode 剑指Offer II 114. 外星文字典
24 0
|
21天前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
30 0
|
21天前
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
24 0
|
21天前
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
26 0
|
21天前
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
22 0
|
21天前
leetcode 剑指 Offer 40. 最小的k个数
leetcode 剑指 Offer 40. 最小的k个数
20 0
|
21天前
LeetCode 剑指 Offer 28. 对称的二叉树
LeetCode 剑指 Offer 28. 对称的二叉树
19 0
|
21天前
剑指Offer LeetCode 面试题25. 合并两个排序的链表
剑指Offer LeetCode 面试题25. 合并两个排序的链表
19 0