題目:從上往下打印出二叉樹的每個節點,同層節點從左至右打印。
解題思路:創建一個隊列,先將二叉樹的根節點放入隊列中,然後開始循環,只要隊列不爲空,獲取隊列的第一個元素,將其保存爲一個節點tmp,,接着將其push_back到新數組裏面,然後判斷其左孩子是否爲空,若其不爲空,將其push到隊列中,然後再繼續判斷其右孩子是否爲空,若不爲空,將其push到隊列中,然後將tmp結點pop.依次循環就完成了二叉樹的層次遍歷。
代碼實現如下:
/*
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)
{
if(root == NULL)
return arr;
vector<int> arr;
queue<TreeNode*> q;
TreeNode* tmp;
q.push(root);
while(!q.empty())
{
tmp = q.front();
que.push_back(tmp->val);
if(tmp->left != NULL)
q.push(tmp->left);
if(tmp->right != NULL)
q.push(tmp->right);
q.pop();
}
return arr;
}
};
測試結果就不測試了,牛客網已近測試過了!有興趣的可以測一下。