前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指60-把二叉树打印成多行

剑指60-把二叉树打印成多行

作者头像
opencode
发布2022-12-26 14:30:51
1470
发布2022-12-26 14:30:51
举报
文章被收录于专栏:知识同步

👌简单

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

解法

这个题好像做恶很多次,上次我是用两个vector来实现的,一个放父亲,一个放子结点,然后用子节点的替换父亲的继续下一轮,但是这次我选择了队列,因为两个栈的空间复杂度有点高,这次就用队列,然后分别记住父节点和子节点的个数,然后用子结点个数替换父节点个数

代码

代码语言:javascript
复制
#include<queue>
#include<vector>

using namespace std;

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;
        if (!pRoot) return res;
        int num = 0;
        node_queue.push(pRoot);
        num++;//当前个数
        while (!node_queue.empty())
        {
            int num_temp = 0; //子树个数
            vector<int> temp_vec;
            for (int i = 0; i < num; i++)
            {
                TreeNode* temp_node = node_queue.front();
                node_queue.pop();
                if (temp_node->left)
                {
                    node_queue.push(temp_node->left);
                    num_temp++;
                }
                if (temp_node->right)
                {
                    node_queue.push(temp_node->right);
                    num_temp++;
                }
                temp_vec.push_back(temp_node->val);
            }
            res.push_back(temp_vec);
            num = num_temp;
        }

        return res;
    }

private:
    queue<TreeNode*> node_queue;
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 解法
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档