如何用TypeScript编写函数实现二叉树镜像转换?
- 内容介绍
- 文章标签
- 相关推荐
本文共计956个文字,预计阅读时间需要4分钟。
目录+前言+思路分析+实现代码+前言+给定一棵二叉树,如何获取它的镜像?
本文将分享如何通过递归或迭代的方式,实现二叉树的镜像转换。我们将跟随思路分析,逐步实现代码,并期待各位开发者阅读后能有所启发。
思路分析:
1.镜像转换的定义:将二叉树的左右子树交换。
2.递归方法:交换当前节点的左右子树,然后递归地对左右子树进行镜像转换。
3.迭代方法:使用栈或队列实现,通过层序遍历或后序遍历的方式交换子树。
实现代码:
python递归方法class TreeNode: def __init__(self, x): self.val=x self.left=None self.right=Nonedef mirror_tree(root): if root: root.left, root.right=mirror_tree(root.right), mirror_tree(root.left) return root
迭代方法(使用栈)def mirror_tree_iterative(root): if not root: return None stack=[root] while stack: node=stack.pop() node.left, node.right=node.right, node.left if node.left: stack.append(node.left) if node.right: stack.append(node.right) return root
主函数,用于测试if __name__==__main__: # 创建测试用例 root=TreeNode(1) root.left=TreeNode(2) root.right=TreeNode(3) root.left.left=TreeNode(4) root.left.right=TreeNode(5)
# 获取镜像 mirrored_root=mirror_tree(root) # 打印镜像后的二叉树 def print_tree(node): if not node: return print(node.val, end=' ') print_tree(node.left) print_tree(node.right)
print(递归方法得到的镜像:) print_tree(mirrored_root) print(\n迭代方法得到的镜像:) print_tree(mirror_tree_iterative(root))
结语:以上是二叉树镜像转换的实现方法。希望本文能帮助到对这一问题的解决感兴趣的开发者。
目录
- 前言
- 思路分析
- 实现代码
前言
给定一颗二叉树,如何获取它的镜像?本文将跟大家分享这个问题的解决方案,欢迎各位感兴趣的开发者阅读本文。
思路分析
当我们把一张写有文字的纸放在镜子前面,你看到的内容正好与你写的内容是相反的。那么我们就可以依据照镜子的经验画出它的镜像了,如下所示:
- 镜像前后的两棵树根节点相同
- 镜像后的树与镜像前相比:它们的左、右子节点交换了位置
通过观察后,我们就得出了一颗树的镜像过程:先序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶节点的左、右子节点之后,就得到了树的镜像。
对树的遍历不了解的开发者,请移步我的另一篇文章:先序遍历
实现代码
想清楚思路后,我们就可以很顺利的写出代码了,如下所示:
export function MirrorImageOfTree(node: BinaryTreeNode | null): void { if (node == null) return; if (node.left == null && node.right == null) return; // 交换左右子节点 const temp = node.left; node.left = node.right; node.right = temp; if (node.left) { MirrorImageOfTree(node.left); } if (node.right) { MirrorImageOfTree(node.right); } }
完整代码请移步:MirrorImageOfTree.ts
我们将文章开头所讲的例子代入上述代码来测试下,如下所示:
const tree: BinaryTreeNode = { key: 8, left: { key: 5, left: { key: 3 }, right: { key: 7 } }, right: { key: 18, left: { key: 13 }, right: { key: 22 } } }; MirrorImageOfTree(null); console.log("镜像后的树", tree);
完整代码请移步:mirrorImage-test.ts
以上就是TypeScript获取二叉树的镜像实例的详细内容,更多关于TypeScript获取二叉树镜像的资料请关注易盾网络其它相关文章!
本文共计956个文字,预计阅读时间需要4分钟。
目录+前言+思路分析+实现代码+前言+给定一棵二叉树,如何获取它的镜像?
本文将分享如何通过递归或迭代的方式,实现二叉树的镜像转换。我们将跟随思路分析,逐步实现代码,并期待各位开发者阅读后能有所启发。
思路分析:
1.镜像转换的定义:将二叉树的左右子树交换。
2.递归方法:交换当前节点的左右子树,然后递归地对左右子树进行镜像转换。
3.迭代方法:使用栈或队列实现,通过层序遍历或后序遍历的方式交换子树。
实现代码:
python递归方法class TreeNode: def __init__(self, x): self.val=x self.left=None self.right=Nonedef mirror_tree(root): if root: root.left, root.right=mirror_tree(root.right), mirror_tree(root.left) return root
迭代方法(使用栈)def mirror_tree_iterative(root): if not root: return None stack=[root] while stack: node=stack.pop() node.left, node.right=node.right, node.left if node.left: stack.append(node.left) if node.right: stack.append(node.right) return root
主函数,用于测试if __name__==__main__: # 创建测试用例 root=TreeNode(1) root.left=TreeNode(2) root.right=TreeNode(3) root.left.left=TreeNode(4) root.left.right=TreeNode(5)
# 获取镜像 mirrored_root=mirror_tree(root) # 打印镜像后的二叉树 def print_tree(node): if not node: return print(node.val, end=' ') print_tree(node.left) print_tree(node.right)
print(递归方法得到的镜像:) print_tree(mirrored_root) print(\n迭代方法得到的镜像:) print_tree(mirror_tree_iterative(root))
结语:以上是二叉树镜像转换的实现方法。希望本文能帮助到对这一问题的解决感兴趣的开发者。
目录
- 前言
- 思路分析
- 实现代码
前言
给定一颗二叉树,如何获取它的镜像?本文将跟大家分享这个问题的解决方案,欢迎各位感兴趣的开发者阅读本文。
思路分析
当我们把一张写有文字的纸放在镜子前面,你看到的内容正好与你写的内容是相反的。那么我们就可以依据照镜子的经验画出它的镜像了,如下所示:
- 镜像前后的两棵树根节点相同
- 镜像后的树与镜像前相比:它们的左、右子节点交换了位置
通过观察后,我们就得出了一颗树的镜像过程:先序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶节点的左、右子节点之后,就得到了树的镜像。
对树的遍历不了解的开发者,请移步我的另一篇文章:先序遍历
实现代码
想清楚思路后,我们就可以很顺利的写出代码了,如下所示:
export function MirrorImageOfTree(node: BinaryTreeNode | null): void { if (node == null) return; if (node.left == null && node.right == null) return; // 交换左右子节点 const temp = node.left; node.left = node.right; node.right = temp; if (node.left) { MirrorImageOfTree(node.left); } if (node.right) { MirrorImageOfTree(node.right); } }
完整代码请移步:MirrorImageOfTree.ts
我们将文章开头所讲的例子代入上述代码来测试下,如下所示:
const tree: BinaryTreeNode = { key: 8, left: { key: 5, left: { key: 3 }, right: { key: 7 } }, right: { key: 18, left: { key: 13 }, right: { key: 22 } } }; MirrorImageOfTree(null); console.log("镜像后的树", tree);
完整代码请移步:mirrorImage-test.ts
以上就是TypeScript获取二叉树的镜像实例的详细内容,更多关于TypeScript获取二叉树镜像的资料请关注易盾网络其它相关文章!

