【面試題】從上向下列印陣列|||

頭號理想發表於2021-01-02

題目

請實現一個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。

在這裡插入圖片描述

判斷奇偶翻轉陣列

根據題目就是翻轉一部分返回的答案
其他的內容和從上列印陣列||的內容一樣

我自己寫了一個翻轉陣列的方法
然後判斷奇偶性 在合適的時機翻轉返回的陣列即可

void reverse(vector<int> &a) {
	int left = 0;
	int right = a.size() - 1;

	while (left < right) {
		swap(a[left], a[right]);
		right--;
		left++;
	}
}
vector<vector<int>> levelOrder(TreeNode* root) {
	vector<vector<int>> ans;
	queue<TreeNode*> q;
	q.push(root);
	if (root == NULL) {
		return ans;
	}
	bool flag = true;//是否是第一行

	while (!q.empty()) {
		vector<int> t;
		int count = q.size();

		while (count--) {
			TreeNode* temp = q.front();
			q.pop();
			t.push_back(temp->val);
			if (temp->left != NULL) {
				q.push(temp->left);
			}
			if (temp->right != NULL) {
				q.push(temp->right);
			}
		}
		ans.push_back(t);
	}
	for (int i = 0; i < ans.size(); i++) {
		if (flag) {
			flag = !flag;
		}
		else {
			reverse(ans[i]);
			flag = !flag;
		}
	}
	return ans;
}

在這裡插入圖片描述

由於時間原因 其他解法在之後我會更新

相關文章