1. 程式人生 > >從上到下打印二叉樹

從上到下打印二叉樹

light c++ root tor ber eno esc clas 打印

題目描述

從上往下打印出二叉樹的每個節點,同層節點從左至右打印。
/*
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*> q;
        q.push(root);
        vector<int> r;
        while(!q.empty()) {
            root=q.front();
            q.pop();
            if(!root) continue;
            r.push_back(root->val);
            q.push(root->left);
            q.push(root->right);
        }
        return r;
    }
};

  

/* C++ 循環 實現 要打印成一行,即用動態數組存儲即可 這道題考的是廣度優先遍歷算法,這個算法是用隊列這種數據結構實現的。 STL中的deque是“兩端都可以進出”的隊列,queue只能是“後端進前端出”的隊列。 這裏選用deque和queue都行,但我選擇使用deque嘗試一下“高大上”的隊列。 */
/*
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) {
		deque<TreeNode*> dequeNode;
        vector<int> result;
        if(root==NULL)	return result;
        dequeNode.push_back(root);
        
        while(dequeNode.size()) {
            TreeNode * pNode=dequeNode.front();
            result.push_back(pNode->val);
            dequeNode.pop_front();
            if(pNode->left!=NULL)
                dequeNode.push_back(pNode->left);
           	if(pNode->right!=NULL)
                dequeNode.push_back(pNode->right);
        }
        return result;
    }
};

  

從上到下打印二叉樹