【算法二十四】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)

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

相关推荐
To_OC4 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵7 小时前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC10 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
To_OC1 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
刘马想放假2 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
05Kevin2 天前
lk每日冒险题--数据结构6.27
算法
To_OC2 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法