LeetCode题目:二叉树的镜像

题目描述:

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

例如输入:
在这里插入图片描述
镜像输出:
在这里插入图片描述

示例 1:

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

限制:

0 <= 节点个数 <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

老规矩,需要遍历二叉树的时候,第一件事想到递归。
解这道题的思路很明确,首先需要用递归的方法逐层往下,访问到叶子节点(叶子节点的充分必要条件是节点的左右子节点都为空),然后回到叶子节点的根节点,要操作的就是找到的这个根节点,将这个根节点的左右子节点交换之后,返回这个根节点;往上一层的根节点也会交换刚刚完成交换的子节点。
这样就做到从二叉树的底部开始,一层一层往上交换节点,最后返回顶层的根节点。

代码(Java):

public class doingmyself {
	public static void main(String[] args) {
		TreeNode root = new TreeNode(4);
		root.left = new TreeNode(2);
		root.right = new TreeNode(7);
		root.left.left = new TreeNode(1);
		root.left.right = new TreeNode(3);
		root.right.left = new TreeNode(6);
		root.right.right = new TreeNode(9);
		TreeNode ans = mirrorTree(root);
		System.out.println();
	}
	
	public static TreeNode mirrorTree(TreeNode root) {
		//首先要遍历二叉树,如果是空的就直接返回,如果不是空的,就逐层递归,确保去到最底层的叶子节点,要操作的是叶子节点的上一层节点
		if(root == null || (root.left == null && root.right == null)) { //当一个节点的左右子节点都为空的时候,他就是叶子节点
			return root;  //叶子节点没有左右子节点可以交换,直接返回上一层的根节点
		}
		//如果上面一步还没有返回,就说明还没有到达叶子节点,通过递归继续往下打开
		root.left = mirrorTree(root.left);
		root.right = mirrorTree(root.right);
		//到达叶子节点之后就会直接返回到上层节点,去到要操作的子节点处,进行处理
		TreeNode temp = root.left; //首先把左节点存起来,防止覆盖后丢失
		root.left = root.right;	//把右节点赋给左节点,
		root.right = temp;  //把原来预存起来的左节点赋给右节点,完成交换
		return root; //返回交换左右子节点后的节点
	}
}

class TreeNode{
	int val;
	TreeNode left;
	TreeNode right;
	TreeNode(int x){
		val = x;
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值