如何在Java中实现翻转二叉树的函数?
发布时间:2023-07-01 01:49:49
翻转二叉树也被称为镜像二叉树,是指将二叉树的左右子树交换位置。在Java中实现翻转二叉树的函数可以使用递归或迭代的方法。下面将为您详细介绍两种方法:
方法一:使用递归
递归是一种解决问题的方法,它将问题分解为更小的子问题。在这种情况下,我们可以通过递归地翻转左右子树来翻转整个二叉树。
代码如下:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class BinaryTree {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
// 翻转左右子树
TreeNode temp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(temp);
return root;
}
}
方法二:使用迭代
除了递归,我们还可以使用迭代的方法来翻转二叉树。我们可以使用一个栈(或队列)来跟踪需要翻转的节点。
代码如下:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class BinaryTree {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode current = stack.pop();
// 翻转左右子树
TreeNode temp = current.left;
current.left = current.right;
current.right = temp;
if (current.left != null) {
stack.push(current.left);
}
if (current.right != null) {
stack.push(current.right);
}
}
return root;
}
}
无论你选择使用递归还是迭代的方法,都可以很容易地翻转二叉树。这两种方法的时间复杂度均为O(n),其中n是二叉树中节点的数量。希望这些代码对你有所帮助!
