难度等级:容易
上一篇算法:
543. 二叉树的直径【71】
力扣此题地址:
226. 翻转二叉树 - 力扣(Leetcode)
1.题目:226. 翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

2.解题思路:
遇到二叉树的算法题,就知道要用递归的方式来解决
这里要求的是翻转二叉树,除了根节点,每个节点都有翻转, 仔细看下题目的 输入 和 输出,输出的左右子树的位置跟输入正好是相反的,于是我们可以递归的交换左右子树来完成这道题。 看一下动画就明白了:
其实就是交换一下左右节点,然后再递归的交换左节点,右节点 根据动画图我们可以总结出递归的两个条件如下:
- 终止条件:当前节点为 null 时返回
- 交换当前节点的左右子节点,再递归的交换当前节点的左子节点的左右子节点,递归的交换当前节点的右子节点的左右子节点
思路参考:226. 翻转二叉树 - 力扣(Leetcode)
3.代码实现:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
	public TreeNode invertTree(TreeNode root) {
		if(root==null) {//递归函数的终止条件,节点为空时返回
			return null;
		}
		
        //下面三句是将当前节点的左右子树交换
		TreeNode tmp = root.right;
		root.right = root.left;
		root.left = tmp;
		
		invertTree(root.left);//递归交换当前节点的 左子树
		invertTree(root.right);//递归交换当前节点的 右子树
		
        //函数返回时就表示当前这个节点,以及它的左右子树,都已经交换完了
		return root;
	}
}



















