二叉樹層序遍歷

二叉樹層序遍歷(廣度優先遍歷)

struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class levelOrderIter {
public:
	vector<vector<int>> levelOrder(TreeNode* root) {

		vector<vector<int>>res;
		queue<TreeNode*> qe;
		TreeNode*curr = root;

		if (curr != NULL) {
			qe.push(curr);
		}

		while (!qe.empty()) {
			vector<int> lv;
			int level = qe.size();
			for (int i = 0; i < level; ++i) {
				
				curr=qe.front();
				qe.pop();
				lv.push_back(curr->val);
				if (curr->left != NULL) {
					qe.push(curr->left);
				}
				if (curr->right != NULL) {
					qe.push(curr->right);
				}
			}
			res.push_back(lv);
		}
		return res;
	}
};

class levelOrderRecur {
public:
	vector<vector<int>> levelOrder(TreeNode* root) {
		vector<vector<int>> ans;
		pre(root, 0, ans);
		return ans;
	}

	void pre(TreeNode *root, int depth, vector<vector<int>> &ans) {
		if (!root) return;
		if (depth >= ans.size())
			ans.push_back(vector<int> {});
		//前序、中序及後序遍歷一樣,因爲插入的位置是確定的
		ans[depth].push_back(root->val);
		pre(root->left, depth + 1, ans);
		pre(root->right, depth + 1, ans);
	}
};
發佈了34 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章