1. 程式人生 > >21、從上到下列印二叉樹

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