今天后3题用层序遍历都很好做,但是递归总是很难想出来,递归是真的想不明白,好挫败啊,还得多看多练。
226.翻转二叉树
用了前序递归法,后面的迭代法没看。中序递归法很绕,但一定要弄懂(可以看视频),看明白之后会对递归有一个更深的理解。
101. 对称二叉树
自己没想出来。看评论区提醒用层序迭代很好写(注意int类型不识别null,使用optional<int>容器,nullopt等价于null,好像是c++17才支持):
class Solution {
public:
bool isSymmetric(TreeNode* root) {
queue<TreeNode*> que;
deque<optional<int>> nums;
if (root != nullptr) que.push(root);
else return true;
while (!que.empty()) {
int size = que.size();
for (int i = 0; i < size; i++) {
if (que.front()->left != nullptr) {
que.push(que.front()->left);
nums.push_back(que.front()->left->val);
}
else
nums.push_back(nullopt);
if (que.front()->right != nullptr) {
que.push(que.front()->right);
nums.push_back(que.front()->right->val);
}
else
nums.push_back(nullopt);
que.pop();
}
while (!nums.empty()) {
if (nums.front() == nums.back()) {
nums.pop_back();
nums.pop_front();
}
else
return false;
}
}
return true;
}
};
104.二叉树的最大深度
自己选择用层序遍历。递归法推荐计算树的高度=树的最大深度。直接用前序递归求深度看不懂啊啊啊。
111.二叉树的最小深度
层序遍历简单。递归难。

被折叠的 条评论
为什么被折叠?



