一、Leetcode-剑指 Offer 044:二叉树每层的最大值
1.1 问题描述
1.2 问题分析
这道题就在按层遍历的基础上,来找出max。
1.3 问题解决
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> ans;
queue<TreeNode*> q;
if(root) q.push(root);
while(!q.empty())
{
int n = q.size();
int max = 0;
for(int i = 1; i <= n; i++)
{
TreeNode* node = q.front();
q.pop();
if(i == 1) max = node->val;
else if(node->val > max) max = node->val;
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
ans.push_back(max);
}
return ans;
}
};
二、Leetcode-617:合并二叉树
2.1 问题描述
2.2 问题分析
这道题合并的话就三种情况:①两树的结点都为空,返回空结点,②一个树的结点为空,返回不为空的结点,③两树的结点都不为空,返回一个两结点值相加的新结点,所以就前序遍历两个二叉树,按这三种情况来处理
2.3 问题解决
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1 == nullptr) return t2;
if(t2 == nullptr) return t1;
TreeNode* merged = new TreeNode(t1->val + t2->val);
merged->left = mergeTrees(t1->left, t2->left);
merged->right = mergeTrees(t1->right, t2->right);
return merged;
}
};