剑指offer(C++)-JZ32:从上往下打印二叉树(数据结构-树)
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer(C++)-JZ32:从上往下打印二叉树(数据结构-树)相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入8,6,10,#,#,2,1,如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
数据范围:
0<=节点总数<=1000
-1000<=节点值<=1000
示例:
输入:
8,6,10,#,#,2,1
返回值:
[8,6,10,2,1]
解题思路:
本题考察数据结构树的使用,可借助队列来解。通过队列的先进先出特征,将二叉树的结点一行行放入队列,每弹出一个结点,就将其值推给output;当队列空的时候,就说明二叉树遍历完成了。
测试代码:
/*
struct TreeNode
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL)
;*/
class Solution
public:
vector<int> PrintFromTopToBottom(TreeNode* root)
// 定义队列
queue<TreeNode*> temp;
vector<int> output;
// 先存放根节点
if(root)
temp.push(root);
// 若队列不为空,则说明树未完全遍历
while(!temp.empty())
// 提取队列最前的结点
TreeNode *a=temp.front();
// 输出该结点的值
output.push_back(a->val);
// 弹出已经存储过的结点
temp.pop();
// 将弹出结点的左右子树按序存放在队列中,先进先出
if(a->left)
temp.push(a->left);
if(a->right)
temp.push(a->right);
return output;;
;
以上是关于剑指offer(C++)-JZ32:从上往下打印二叉树(数据结构-树)的主要内容,如果未能解决你的问题,请参考以下文章
《剑指offer刷题笔记》32分行从上往下打印二叉树c++详细题解