1. 程式人生 > >【劍指offer】面試題25:從上往下列印二叉樹

【劍指offer】面試題25:從上往下列印二叉樹

二、解題思路:

        採用一個例子說明: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;
    }
};