LeetCode107 Binary Tree Level Order Traversal II 二叉树层级遍历II

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:
Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its bottom-up level order traversal as:

[
  [15,7],
  [9,20],
  [3]
]

题源:here;完整实现:here

思路: 

第102题,但是在生成结果的顺序上需要从后往前。两种方法,但是第一种方法的insert函数在LeetCode上报错,所以才写了第二种。

1 直接改变result写入顺序(Runtime error)

void helper(TreeNode* root, int layer, vector<vector<int>>& result){
	if (!root) return;
	layer++;
	if (result.size() < layer){
		if (result.size() == 0) result.push_back({});
		else result.insert(result.begin(), {});
	}
	int idx = result.size() - layer;
	result[idx].push_back(root->val);
	if (root->left) helper(root->left, layer, result);
	if (root->right) helper(root->right, layer, result);
}

vector<vector<int>> levelOrderBottom(TreeNode* root) {
	vector<vector<int>> result;
	helper(root, 0, result);

	return result;
}

2 在记录分层遍历后再改变输出顺序

void helper2(TreeNode* root, int layer, vector<vector<int>>& result){
	if (!root) return;
	layer++;
	if (result.size() < layer) result.push_back({});
	result[layer-1].push_back(root->val);
	if (root->left) helper2(root->left, layer, result);
	if (root->right) helper2(root->right, layer, result);
}

vector<vector<int>> levelOrderBottom2(TreeNode* root) {
	vector<vector<int>> temp;
	helper2(root, 0, temp);

	vector<vector<int>> result;
	for (int i = temp.size()-1; i>=0; i--)
		result.push_back(temp[i]);

	return result;
}

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/81101573
今日推荐