21、从上到下打印二叉树

题目描述:

  从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图中的二叉树,则依次打印出8、6、10、5、7、9、11。
在这里插入图片描述

解题思路:

  这道题实质是考查树的层次遍历(广度优先遍历)算法:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。

Demo:

/*
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 *> que;
        que.push(root);
        vector<int> vecout;
        if (root == nullptr)
            return vecout;
        // 广度优先搜索
        while (!que.empty())
        {
            // 取队头元素
            auto tmp = que.front();
            vecout.push_back(tmp->val);
            // 把左右子结点加入队列
            if (tmp->left != nullptr)
                que.push(tmp->left);
            if (tmp->right != nullptr)
                que.push(tmp->right);
            que.pop();
        }
        return vecout;
    }
};

猜你喜欢

转载自blog.csdn.net/daaikuaichuan/article/details/85031499