问题描述
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
方法一
思路
用一个栈,从根节点开始,先将根节点入栈。接下来对于每次操作,先出栈,如果该元素左孩子存在则入栈,如果右孩子存在则入栈。交换该节点的左右孩子。重复上述步骤,直到栈为空,最后返回根节点。
代码
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null) return root;
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
while(!stack.isEmpty()) {
TreeNode node = stack.pop();
if(node.left != null) stack.push(node.left);
if(node.right != null) stack.push(node.right);
TreeNode temp = node.right;
node.right = node.left;
node.left = temp;
}
return root;
}
}
方法二
思路
使用递归,如果根节点为空,则返回根节点,如果不为空,则左子树是右子树的镜像,右子树是左子树的镜像。
代码
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null) return root;
TreeNode node = root.left;
root.left = mirrorTree(root.right);
root.right = mirrorTree(node);
return root;
}
}