【算法二十四】101. 对称二叉树 543. 二叉树的直径

101. 对称二叉树

递归:

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root.left,root.right);
    }

    public boolean check(TreeNode u,TreeNode v){
        if(u==null && v==null){
            return true;
        }

        if(u==null || v==null || u.val != v.val){
            return false;
        }

        return check(u.left,v.right) && check(u.right,v.left);
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

迭代:

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root, root);
    }

    public boolean check(TreeNode u, TreeNode v) {
        Queue<TreeNode> q = new LinkedList<TreeNode>();
        q.offer(u);
        q.offer(v);
        while (!q.isEmpty()) {
            u = q.poll();
            v = q.poll();
            if (u == null && v == null) {
                continue;
            }
            if ((u == null || v == null) || (u.val != v.val)) {
                return false;
            }

            q.offer(u.left);
            q.offer(v.right);

            q.offer(u.right);
            q.offer(v.left);
        }
        return true;
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

核心:递归是递归函数本身,迭代是通过队列存储节点,注意ArrayDeque存储不了null,要用LinkedList来存储

543. 二叉树的直径

递归:

java 复制代码
 //拆分问题为母问题与子问题,找联系
 //求直径,其实就是求左子树最长值+右子树最长值
 //左子树最长值就是左子树下一个节点的最长值+1
class Solution {
    private int ans;
    public int diameterOfBinaryTree(TreeNode root) {
        int maxLen = simulate(root);
        return ans;
    }

    private int simulate(TreeNode root){
        if(root == null){
            return -1;
        }

        int lLen = simulate(root.left) + 1;
        int rLen = simulate(root.right) + 1;
        ans = Math.max(ans,lLen+rLen);
        return Math.max(lLen,rLen);
    }
}

时间复杂度:O(N)

空间复杂度:O(N)

递归:写终止条件,找逻辑,确保范围缩小

相关推荐
信奥卷王8 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵8 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG9 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
码完就睡10 小时前
数据结构——红黑树
数据结构
码爸10 小时前
数据结构详细介绍
数据结构
Navigator_Z10 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛10 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记10 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序11 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm