一、 226.翻转二叉树
题目:
给你一棵二叉树的根节点
root
,翻转这棵二叉树,并返回其根节点。示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
学习链接:翻转二叉树状态:做出来了
细节之处:1(代码里面)
思路:这道题可以使用前后序来进行反转,中序比较麻烦,思路就是在用前序遍历的时候,来交换节点。
class Solution {
public TreeNode invertTree(TreeNode root) {
preOrder(root);
return root;
}
public static void preOrder(TreeNode root){
if(root==null)return;
TreeNode temp=root.left;
root.left=root.right; //1 前序遍历的方式
root.right=temp;
preOrder(root.left);
preOrder(root.right);
}
}
二、101. 对称二叉树
题目:
给你一个二叉树的根节点
root
, 检查它是否轴对称。示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true学习链接:对称二叉树
状态:做出来了
细节之处:1 2 3 4 5 6 7(代码里面)
思路:即然是对称二叉树,而且以根节点为对称轴,所以递归的时候,对根节点的左右子树进行遍历,注意这里只能用后后序遍历的方式,因为中节点需要知道其子树是否对称,并且外侧对外侧,内测对内存,这里要注意终止条件比较多,需要想清楚。
class Solution {
public boolean isSymmetric(TreeNode root) {
return compareTo(root.left,root.right);
}
public static boolean compareTo(TreeNode left,TreeNode right){
if(left==null&&right!=null)return false; //1 当左子树为空,右子树不为空,肯定不对称
if(right==null&&left!=null)return false; //2 当右子树为空,左子树为空,不对称=
if(left==null&&right==null)return true; //3 当左子树和右子树都为空是,对称
if(left.val!=right.val)return false; //4 若值不相等,不对称
boolean outside= compareTo(left.left,right.right);//5 获取外侧的情况
boolean inside= compareTo(left.right,right.left);//6 获取内侧的情况
boolean result=outside&&inside; //7 内外侧都ture才为true
return result;
}
}
思路:
三、104.二叉树的最大深度
题目:
给定一个二叉树
root
,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3学习链接:二叉树的最大深度
状态:做出来了
细节之处: 1 2 3(代码里面)
思路: 这道题就比较容易了,使用前后序都比较方便,在这里使用后序,遍历每个节点加一就行了,左右子树取最大值
class Solution {
public int maxDepth(TreeNode root) {
return getMax(root);
}
public static int getMax(TreeNode root){
if(root==null)return 0;
int left= getMax(root.left)+1; //1 获取左子树的最大深度
int right=getMax(root.right)+1; //2 获取右子树的最大深度
return Math.max(left,right); //3 返回当前层最大值
}
}
四、111.二叉树的最小深度
题目:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:2
学习链接:二叉树的最小深度状态:做出来了
细节之处:1 2 3(代码里面)
思路: 表面上和最大深度一样,但这里有坑,因为最小深度不算子树为空的情况,素以要进行特殊处理。
class Solution {
public int minDepth(TreeNode root) {
if(root==null)return 0;
return getMin(root);
}
public static int getMin(TreeNode root){
if(root==null)return 0;
int left= getMin(root.left)+1;
int right=getMin(root.right)+1;
if(left==1&&right!=1)return right;//1 当左子树为空,右子树不为空,返回右子树深度
if(right==1&&left!=1)return left;/2 当右子树为空,左子树不为空,返回左子树深度
return Math.min(left,right);//3 返回当前层最小的深度
}
}