剑指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;;
    }
};

猜你喜欢

转载自blog.csdn.net/zhaitianbao/article/details/122975524
今日推荐