首页 > 基础资料 博客日记
剑指offer-18、⼆叉树的镜像
2025-08-05 09:30:02基础资料围观29次
这篇文章介绍了剑指offer-18、⼆叉树的镜像,分享给大家做个参考,收藏Java资料网收获更多编程知识
题⽬描述
操作给定的⼆叉树,将其变换为源⼆叉树的镜像。
⼆叉树的镜像定义:源⼆叉树
思路及解答
递归
采用后序遍历(左-右-根)的方式递归访问每个节点:
- 递归处理左子树
- 递归处理右子树
- 访问根节点并交换其左右子树
public TreeNode mirrorTree(TreeNode root) {
if (root == null) return null;
// 先递归处理子树
TreeNode left = mirrorTree(root.left);
TreeNode right = mirrorTree(root.right);
// 再交换左右子树
root.left = right;
root.right = left;
return root;
}
或者采用前序遍历(根-左-右)的方式递归访问每个节点:
- 访问根节点并交换其左右子树
- 递归处理左子树
- 递归处理右子树
public TreeNode mirrorTree(TreeNode root) {
if (root == null) {
return null;
}
// 交换左右子树
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
// 递归处理左右子树
mirrorTree(root.left);
mirrorTree(root.right);
return root;
}
- 时间复杂度:O(n),每个节点只被访问一次
- 空间复杂度:O(h),h为树的高度,递归栈空间消耗
迭代
利用队列实现广度优先搜索(BFS):
- 将根节点加入队列
- 取出队首节点并交换其左右子树
- 将非空的左右子节点加入队列
- 重复直到队列为空
public TreeNode mirrorTree(TreeNode root) {
if (root == null) return null;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
// 交换左右子树
swap(node);
// 将子节点加入队列
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
return root;
}
public void swap(TreeNode root) {
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
- 时间复杂度:O(n)
- 空间复杂度:O(n),最坏情况下需要存储所有节点
文章来源:https://www.cnblogs.com/seven97-top/p/19019113
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
上一篇:Mysql的索引数量是否越多越好?为什么?
下一篇:网关升级
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?