【劍指offer】面試題25:從上往下列印二叉樹
阿新 • • 發佈:2019-02-12
二、解題思路:
採用一個例子說明:8,6,10,5,7,9,11.對於第一層,只有根節點 “8”,第二層有節點“6”和“10”。
從根節點分析,為了能夠接下來列印節點為8的兩個子節點,我們應該在遍歷到該節點時把值為6 和 10 的兩個節點儲存到一個容器裡。按照從左向右列印的要求,取出6,儲存其兩個子節點“5”和“7”。隨後取出10,儲存其子節點“9”和“11”。
可以看出,這是一個先進先出的容器。使用 佇列 進行儲存。
三、實現程式碼:
/* 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) { vector<int> result; queue<TreeNode*> Q; if(root==NULL) return result; Q.push(root); while(!Q.empty()) { TreeNode* p=Q.front(); Q.pop(); result.push_back(p->val); if(p->left!=NULL) Q.push(p->left); if(p->right!=NULL) Q.push(p->right); } return result; } };