从上到下打印二叉树

题目描述:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行

此题是在层次遍历的基础上改动过来的,有需要的话,可以先看看我的上一篇题解:

https://blog.csdn.net/qq_54669536/article/details/123940163

题目解析:此遍历方式本质还是二叉树层次遍历,只是加了一个条件,将每一层分开输出。其实实现方式是很简单的,我们只需要在while循环内层再加一个循环,因为我们入队是一层一层入队的,当入完一层后,我们记录当前队列中的元素个数size,根据这个次数循环出队,等size减为0时,就说明这一层的节点已经打印完(注意,这里的size是在进入内部循环之前就确定的,之后的元素个数变化不会对这个size造成影响)。我们将将每一层出队的元素都存在一个单独的一维容器中,等内部循环结束之后,再将此容器1存放在二维容器中。

代码实现:

 vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>>result;
        queue<TreeNode*>qu;
        if(root!=NULL)qu.push(root);
        while(!qu.empty())
        {
            int size=qu.size();
            vector<int>vec;
            for(int i=0;i<size;++i)
            {
                TreeNode*node=qu.front();
                qu.pop();
                vec.push_back(node->val);
                if(node->left!=NULL)qu.push(node->left);
                if(node->right!=NULL)qu.push(node->right);
            }
            result.push_back(vec);
        }
        return result;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值