二叉树的镜像

1.题目:
操作给定的二叉树,将其变换为源二叉树的镜像。

二叉树的镜像定义:源二叉树 
            8
           /  \
          6   10
         / \  / \
        5  7 9 11
        镜像二叉树
            8
           /  \
          10   6
         / \  / \
        11 9 7  5

2.思路:
方法一:递归,最为简单的方式;时间复杂度O(n)

public class Solution {
    public void Mirror(TreeNode root) {
        //递归结束的标记
        if(root==null){
            return ;
        }
        //递归目的:交换的经典操作
        TreeNode tempNode;
        tempNode=root.left;
        root.left=root.right;
        root.right=tempNode;
        //左右子树递归
        Mirror(root.left);
        Mirror(root.right);
    }
}

方法二:非递归的方法,使用一个while循环解决
镜像就是将“根”节点的左右两个“子”节点互换,类似于数组的元素交换(运用临时节点temp),利用二叉树的广度优先搜索即可

import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    public void Mirror(TreeNode root) {
        if(root==null){
            return;
        }
        Queue<TreeNode> nodes=new LinkedList<>();//利用队列临时存储
        TreeNode curr;//记录现在的节点
        TreeNode temp;//临时节点
        nodes.offer(root);//入队列
        while(!nodes.isEmpty()){//如果不为空,继续交换
        curr=nodes.poll();//出队列
        temp=curr.left;
        curr.left=curr.right;
        curr.right=temp;
        if(curr.left!=null){
        nodes.offer(curr.left);
        }
        if(curr.right!=null){
        nodes.offer(curr.right);
        }
        }
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务