【Java】二叉树的镜像

22 篇文章 0 订阅

题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像(根节点左右子节点交换顺序)。

思路

画图可以很清晰地得到思路:先前序遍历,对每个结点交换左右子结点。
注意:前中后遍历参考

测试案例

1.功能测试(普通二叉树;左斜树;右斜树;一个结点)

2.特殊测试(根结点为null;)

Java代码+测试用例

public class mirrorOfTree {
    //类似c++中结构体
    public static class TreeNode{
        int val=0;
        TreeNode left=null;
        TreeNode right=null;
        //构造函数
        public TreeNode(int val){
            this.val=val;
        }
    }
    public static void Mirror(TreeNode root){
        if(root==null)
            return;
        //左右子节点交换
        TreeNode tempNode=root.left;
        root.left=root.right;
        root.right=tempNode;
        Mirror(root.left);
        Mirror(root.right);
    }
    //前序遍历递归输出
    public static void preOrderRe(TreeNode root){
        if(root!=null){
            System.out.println(root.val);
            preOrderRe(root.left);
            preOrderRe(root.right);
        }
    }
    public static void main(String[] args) {
        //1.功能测试
        /*
                         8
                        /  \
                       6    10
                      / \   / \
                     5   7 9   11
        */
        TreeNode nodeA1=new TreeNode(8);
        TreeNode nodeA2=new TreeNode(6);
        TreeNode nodeA3=new TreeNode(10);
        TreeNode nodeA4=new TreeNode(5);
        TreeNode nodeA5=new TreeNode(7);
        TreeNode nodeA6=new TreeNode(9);
        TreeNode nodeA7=new TreeNode(11);
        nodeA1.left=nodeA2;
        nodeA1.right=nodeA3;
        nodeA2.left=nodeA4;
        nodeA2.right=nodeA5;
        nodeA3.left=nodeA6;
        nodeA3.right=nodeA7;
        Mirror(nodeA1);
        preOrderRe(nodeA1);

    }
    @Test//2.二叉树的所有节点都没有左子树
    public void mirror2(){
        TreeNode nodeA21=new TreeNode(8);
        TreeNode nodeA22=new TreeNode(10);
        TreeNode nodeA23=new TreeNode(11);
        nodeA21.right=nodeA22;
        nodeA22.right=nodeA23;
        Mirror(nodeA21);
        preOrderRe(nodeA21);
    }
    @Test//3.二叉树的所有节点都没有右子树
    public void mirror3(){
        TreeNode nodeA31=new TreeNode(8);
        TreeNode nodeA32=new TreeNode(10);
        TreeNode nodeA33=new TreeNode(11);
        nodeA31.left=nodeA32;
        nodeA32.left=nodeA33;
        Mirror(nodeA31);
        preOrderRe(nodeA31);
    }
    @Test//4.只有一个节点
    public void mirror4(){
        TreeNode nodeA41=new TreeNode(6);
        Mirror(nodeA41);
        preOrderRe(nodeA41);
    }
    @Test//5.特殊输入测试
    public void mirror5(){
        Mirror(null);
        preOrderRe(null);
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值