【数据结构与算法 | 二叉树篇】力扣101, 104, 111

1. 力扣101 : 对称二叉树

(1). 题

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

复制代码
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

复制代码
输入:root = [1,2,2,null,3,null,3]
输出:false

提示:

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

(2). 思路

用队列将二叉树的根节点的左子树和右子树的值记录下来,然后while循环比较.

(3). 解

java 复制代码
class Solution {
    Deque<Integer> deque1 = new LinkedList<>();
    Deque<Integer> deque2 = new LinkedList<>();
    public boolean isSymmetric(TreeNode root) {
        boolean flag = true;
        recursionLeft(root.left);
        recursionRight(root.right);
        while (!deque1.isEmpty() && !deque2.isEmpty()) {
            if (deque1.poll() != deque2.poll()) {
                flag = false;
            }
        }
        return flag;
    }
    public void recursionLeft(TreeNode root) {
        if (root == null) {
            deque1.offer(110);
            return;
        }
        deque1.offer(root.val);
        recursionLeft(root.left);
        recursionLeft(root.right);
    }

    public void recursionRight(TreeNode root) {
        if (root == null) {
            //这处代码是需要的, 不然光靠根左右是无法确定是否是对称的
            deque2.offer(110);
            return;
        }
        deque2.offer(root.val);
        recursionRight(root.right);
        recursionRight(root.left);
    }
}

2. 力扣104 : 二叉树的最大深度

(1). 题

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

复制代码
输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

复制代码
输入:root = [1,null,2]
输出:2

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100

(2). 思路

递归,从根节点开始,树的最大高度就是,根节点+左孩子的高度/右孩子的高度.而该左孩子的高度为左孩子+左孩子的左孩子的高度/左孩子的右孩子高度...

(3). 解

java 复制代码
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int a = maxDepth(root.left);
        int b = maxDepth(root.right);
        a = a > b ? a : b;
        return 1 + a;
    }
}

3. 力扣111 : 二叉树的最小深度

(1). 题

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

**说明:**叶子节点是指没有子节点的节点。

示例 1:

复制代码
输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

复制代码
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 105] 内
  • -1000 <= Node.val <= 1000

(2). 思路

与求解二叉树的最大二叉树代码不同的是,题目要求根节点到最近叶子节点的高度,对于根节点只有左子树(或只有右子树)这种情况来说,需要额外讨论,因为此时不能直接返回1,而是要返回1+右子树的高度.

(3). 解

java 复制代码
class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (root.left == null) {
            return 1 + minDepth(root.right);
        }
        if (root.right == null) {
            return 1 + minDepth(root.left);
        }
        int a = minDepth(root.left);
        int b = minDepth(root.right);
        a = a < b ? a : b;
        return a + 1;
    }
}
相关推荐
思麟呀1 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
All for pursuit.3 小时前
【分治-3】347.前K个高频元素
数据结构·c++·算法·leetcode
Elastic 中国社区官方博客4 小时前
Kubernetes attributes processor v1:它对 EDOT Collector 意味着什么
java·大数据·elasticsearch·搜索引擎·贪心算法·kubernetes·全文检索
All for pursuit.4 小时前
【二分查找-2】34.在排序数组中查找元素的第一个和最后一个位置
数据结构·c++·算法·leetcode
bro_Java6665 小时前
链表进阶2:双向链表的构建
java·数据结构·链表
梦帮科技6 小时前
量子张量网络破局大模型:从矩阵乘积态 (MPS) 到张量列 (TT-SVD) 低秩收缩全推导
网络·数据结构·数据库·线性代数·矩阵·架构·模拟退火算法
LOVE️YOU7 小时前
Python 数据结构的本质:位置、对象引用、Hash 与可变性
数据结构·python·哈希算法
不会就选b7 小时前
算法日常・每日刷题--<动态规划>1
java·数据结构·算法
shehuiyuelaiyuehao7 小时前
算法54,链表 两数相加
数据结构·算法·链表
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出弹子游戏机中数量为奇数的数字——只出现奇数次
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质