代码随想录算法训练营day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
226.翻转二叉树
先序后序均可,不能中序,会导致一颗子树被反复翻转
点击查看代码
class Solution {
public:
void Travesal(TreeNode *root) {
if(root == nullptr) return;
swap(root->left, root->right);
invertTree(root->left);
invertTree(root->right);
}
TreeNode* invertTree(TreeNode* root) {
Travesal(root);
return root;
}
};
101.对称二叉树
本题有一种错误解法,就是左中右遍历二叉树得序列1,再右中左遍历二叉树得序列2,这种方法在树节点值均不相同时ok,但在以下测试用例下不ok:
本题有点别扭,先跳过...
104.二叉树的最大深度
解法一:层序遍历,见day13
解法二:前序遍历,设置全局变量depth,并在参数列表中设置当前深度curDepth,通过前序遍历自上往下传,并更新depth值
点击查看代码
class Solution {
public:
int depth = 0;
void findMaxD(TreeNode* root, int curDepth) {
if(root == nullptr) return;
depth = max(depth, curDepth);
findMaxD(root->left, curDepth + 1); //下一层,深度要加1
findMaxD(root->right, curDepth + 1); //下一层,深度要加1
}
int maxDepth(TreeNode* root) {
findMaxD(root, 1); //通过该调用去更新全局遍历depth
return depth;
}
};
解法三:后序遍历,通过后序遍历,自下往上求每个节点的高度并返回给父节点,逐层往上传递,最终得到根节点的高度,即整棵树的深度
点击查看代码
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr) return 0; //空节点高度为0
int Lheight = maxDepth(root->left); //求左子树的高度
int Rheight = maxDepth(root->right); //求左子树的高度
return max(Lheight, Rheight) + 1; //中间节点的高度 = max(左子树的高度, 右子树的高度) + 1
}
};
111.二叉树的最小深度
解法一:层序遍历,见day13,该解法好理解,建议着重掌握该解法
解法二:后序遍历,对每个节点求最小深度时,要分3种情况讨论
点击查看代码
class Solution {
public:
int minDepth(TreeNode* root) {
if(root == nullptr) return 0;
int Ldepth = minDepth(root->left);
int Rdepth = minDepth(root->right);
if(root->left == nullptr && root->right != nullptr) return Rdepth + 1; //第一种情况
if(root->right == nullptr && root->left != nullptr) return Ldepth + 1; //第二种情况
return min(Ldepth, Rdepth) + 1; //第三种情况(其中合并了左右均不空和左右均为空的情况)
}
};
2025/02/26
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!