【剑指offer刷题笔记】27.二叉树的镜像

本文介绍了如何实现二叉树的镜像操作,包括递归和迭代两种方法。通过交换二叉树非叶子节点的左右子节点,可以得到原二叉树的镜像结构。具体示例展示了输入一棵二叉树后,如何输出其镜像形式。
摘要由CSDN通过智能技术生成

剑指No.27_二叉树的镜像

  • 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1

示例:输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

  • 实际的实现过程就是在遍历二叉树的同时对每个非子节点的左右子节点进行交换,便得到一颗镜像二叉树
  • 方法一:递归遍历二叉树
    public TreeNode mirrorTreeWay(TreeNode root){
        //根节点为空返回
        if (root == null) return root;
        //左或右子节点不为空就进入交换和递归
        if (root.left != null || root.right != null){
            //交换左右子节点
            TreeNode temp = root.left;
            root.left = root.right;
            root.right = temp;
            //递归的遍历二叉树
            mirrorTreeWay(root.left);
            mirrorTreeWay(root.right);
        }
        return root;
    }
  • 方法二:迭代遍历二叉树:
    public TreeNode mirrorTreeWay(TreeNode root){
        if (root == null) return root;
        //用linkedlist充当栈
        LinkedList<TreeNode> stack = new LinkedList<>();
        stack.addFirst(root);
        while (!stack.isEmpty()){
            TreeNode node = stack.removeFirst();
            if (node.left != null) stack.addFirst(node.left);
            if (node.right != null) stack.addFirst(node.right);
            TreeNode temp = node.left;
            node.left = node.right;
            node.right = temp;
        }
        return root;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值