226. Invert Binary Tree
使用栈来跟踪节点的处理过程。 每次从栈顶取出一个节点,检查其左右子节点的状态: 检查根节点是否为空,若为空则返回null。 初始化栈,并将根节点压入栈。 使用循环处理栈中的节点: 循环结束后,返回处理后的根节点。
发布日期:2025-06-19 14:38:53
浏览次数:3
分类:精选文章
本文共 1648 字,大约阅读时间需要 5 分钟。
反转二叉树
你是否遇到过在白板上无法用手比划出二叉树反转的难题?这则来自Google的趣味故事似乎印证了这件事。那么,如何在代码中实现二叉树的反转呢?我们一起来探讨一下这个问题。
给定以下二叉树结构:
4/
2 7/ \ / 1 3 6 9目标是将其反转为:
4/
7 2/ \ / 9 6 3 1这个问题看起来像是一种二叉树的镜像反转,但实际上涉及到交换子节点的位置。我们可以通过使用栈来实现这一点,因为栈非常适合处理后序遍历。
算法思路:
- 如果左子节点和右子节点都为空,继续处理下一个节点。
- 如果右子节点为空,则将左子节点赋值给右子节点,并将左子节点置为空,再将左子节点重新压入栈。
- 如果左子节点为空,则将右子节点赋值给左子节点,并将右子节点置为空,再将右子节点重新压入栈。
- 如果左右子节点都不为空,则交换左右子节点的位置,再将左子节点和右子节点重新压入栈。
这种方法通过不断交换左右子节点的位置,最终实现了二叉树的反转。
代码实现:
public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } Stack stack = new Stack(); stack.push(root); TreeNode tmp, left; while (!stack.empty()) { tmp = stack.pop(); if (tmp.left == null && tmp.right == null) { continue; } if (tmp.left == null) { tmp.left = tmp.right; tmp.right = null; stack.push(tmp.left); continue; } if (tmp.right == null) { tmp.right = tmp.left; tmp.left = null; stack.push(tmp.right); continue; } left = tmp.left; tmp.left = tmp.right; tmp.right = left; stack.push(tmp.left); stack.push(tmp.right); } return root; }} 代码解释:
- 如果当前节点的左右子节点都为空,继续处理下一个节点。
- 如果右子节点为空,交换左、右子节点的位置,并将左子节点压入栈。
- 如果左子节点为空,交换左、右子节点的位置,并将右子节点压入栈。
- 如果左右子节点都不为空,交换左右子节点的位置,并将左右子节点重新压入栈。
通过这种方法,我们可以轻松地实现二叉树的反转。这个算法的时间复杂度为O(h),其中h是树的高度,空间复杂度为O(h)。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2026年06月03日 13时01分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UVa 10465 - Homer Simpson
2023-03-01
php九九乘法表加粗,PHP九九乘法表
2023-03-01
PHP二维数组将重复键值合并重组成三维数组
2023-03-01
PHP二维数组转换为一维数组
2023-03-01
PHP二维数组重组
2023-03-01
PHP交换两个变量值
2023-03-01
php代码执行完整流程介绍
2023-03-01
PHP代码格式化工具phpcf常见问题解决方案
2023-03-01
PHP使用3DES算法加密解密字符串
2023-03-01
php使用memcached扩展的一个BUG
2023-03-01
PHP内核介绍及扩展开发指南—基础知识
2023-03-01
PHP写日志fwrite和file_put_contents的区别与性能
2023-03-01
PHP函数
2023-03-01
PHP函数__autoload失效原因(与smarty有关)
2023-03-01
PHP函数操作数字和汉字互转(100以内)
2023-03-01
PHP函数方法
2023-03-01
PHP删除指定目录下的所有文件和文件夹 | 删除指定文件
2023-03-01
php判断ip黑名单程序代码
2023-03-01
php判断复选框是否被选中的方法
2023-03-01