要求:操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像
思路:先前序遍历这颗树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换玩所有非叶子结点的左、右子节点之后,就得到树的镜像。
方法一:利用栈(或队列)遍历树的所有节点 node ,并交换每个 node 的左 / 右子节点。
方法二:根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。
public class L28_MirrorRecursive {
// 使用栈
public TreeNode0 MirrorRecursive(TreeNode0 root){
if(root==null){
return null;
}
Stack<TreeNode0> stack = new Stack<>();
stack.add(root);
while(!stack.isEmpty()){
TreeNode0 node = stack.pop();
if(node.left!=null){
stack.add(node.left);
}
if(node.right!=null){
stack.add(node.right);
}
TreeNode0 temp = node.left;
node.left = node.right;
node.right = temp;
}
return root;
}
// 使用递归
public TreeNode0 Mirror(TreeNode0 root){
if(root == null){
return null;
}
TreeNode0 temp = root.left;
root.left = Mirror(root.right);
root.right = Mirror(temp);
return root;
}
}
网友评论