21、從上到下列印二叉樹
阿新 • • 發佈:2018-12-16
題目描述:
從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。例如輸入下圖中的二叉樹,則依次打印出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;
}
};