如何用TypeScript编写函数实现二叉树镜像转换?

2026-04-02 07:191阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计956个文字,预计阅读时间需要4分钟。

如何用TypeScript编写函数实现二叉树镜像转换?

目录+前言+思路分析+实现代码+前言+给定一棵二叉树,如何获取它的镜像?

本文将分享如何通过递归或迭代的方式,实现二叉树的镜像转换。我们将跟随思路分析,逐步实现代码,并期待各位开发者阅读后能有所启发。

思路分析:

1.镜像转换的定义:将二叉树的左右子树交换。

2.递归方法:交换当前节点的左右子树,然后递归地对左右子树进行镜像转换。

3.迭代方法:使用栈或队列实现,通过层序遍历或后序遍历的方式交换子树。

实现代码:

python递归方法class TreeNode: def __init__(self, x): self.val=x self.left=None self.right=None

def 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

如何用TypeScript编写函数实现二叉树镜像转换?

主函数,用于测试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分钟。

如何用TypeScript编写函数实现二叉树镜像转换?

目录+前言+思路分析+实现代码+前言+给定一棵二叉树,如何获取它的镜像?

本文将分享如何通过递归或迭代的方式,实现二叉树的镜像转换。我们将跟随思路分析,逐步实现代码,并期待各位开发者阅读后能有所启发。

思路分析:

1.镜像转换的定义:将二叉树的左右子树交换。

2.递归方法:交换当前节点的左右子树,然后递归地对左右子树进行镜像转换。

3.迭代方法:使用栈或队列实现,通过层序遍历或后序遍历的方式交换子树。

实现代码:

python递归方法class TreeNode: def __init__(self, x): self.val=x self.left=None self.right=None

def 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

如何用TypeScript编写函数实现二叉树镜像转换?

主函数,用于测试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获取二叉树镜像的资料请关注易盾网络其它相关文章!