剑指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++详细题解

从上往下打印二叉树(剑指offer_32.1)

剑指Offer对答如流系列 - 从上往下打印二叉树

《剑指offer刷题笔记》31不分行从上往下打印二叉树c++详细题解

剑指offer-从上往下打印二叉树

《剑指offer》第三十二题I:不分行从上往下打印二叉树