算法实现之二叉树的镜像

题目

请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树节点的定义如下:

思路

可以先交换根节点的两个节点,就变成了下图第二个小图的模型,然后分别交换对应子节点的左右子节点,最终就可以得到我们镜像之后的二叉树了

实现

public class BinaryTreeNode {

    public Object data;

    public BinaryTreeNode left;

    public BinaryTreeNode right;

    public BinaryTreeNode() {

    }

    public BinaryTreeNode(Object data, BinaryTreeNode left, BinaryTreeNode right) {
        this.data = data;
        this.left = left;
        this.right = right;
    }

}
public class BinaryTree {

    public static void main(String[] args) {
        //模拟生成上图的二叉树
        BinaryTreeNode node11 = new BinaryTreeNode("11", null, null);
        BinaryTreeNode node9 = new BinaryTreeNode("9", null, null);
        BinaryTreeNode node7 = new BinaryTreeNode("7", null, null);
        BinaryTreeNode node5 = new BinaryTreeNode("5", null, null);
        BinaryTreeNode node10 = new BinaryTreeNode("10", node9, node11);
        BinaryTreeNode node6 = new BinaryTreeNode("6", node5, node7);
        BinaryTreeNode node8 = new BinaryTreeNode("8", node6, node10);

        BinaryTree tree = new BinaryTree();
        //采用递归的方式进行前序遍历
        System.out.println("-----前序遍历------");
        tree.preOrder(node8);
        System.out.println();

        tree.mirrorRecursively(node8);
        System.out.println("-----前序遍历------");
        tree.preOrder(node8);
        System.out.println();
    }

    //镜像翻转二叉树
    public void mirrorRecursively(BinaryTreeNode node) {
        if (node == null || (node.left == null && node.right == null)) {
            return;
        }
        BinaryTreeNode tempNode = node.left;
        node.left = node.right;
        node.right = tempNode;
        if (node.left != null) {
            mirrorRecursively(node.left);
        }
        if (node.right != null) {
            mirrorRecursively(node.right);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值