【面试题】从上向下打印数组|||

题目

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

【面试题】从上向下打印数组|||_第1张图片

判断奇偶翻转数组

根据题目就是翻转一部分返回的答案
其他的内容和从上打印数组||的内容一样

我自己写了一个翻转数组的方法
然后判断奇偶性 在合适的时机翻转返回的数组即可

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;
}

【面试题】从上向下打印数组|||_第2张图片

由于时间原因 其他解法在之后我会更新

你可能感兴趣的:(算法,二叉树,算法,leetcode,数据结构,面试)