• LeetCode_二叉树_中等_1372.二叉树中的最长交错路径


    1.题目

    给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:

    • 选择二叉树中 任意 节点和一个方向(左或者右)。
    • 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。
    • 改变前进方向:左变右或者右变左。
    • 重复第二步和第三步,直到你在树中无法继续移动。

    交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。
    请你返回给定树中最长交错路径的长度。

    示例 1:

    在这里插入图片描述

    输入:root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
    输出:3
    解释:蓝色节点为树中最长交错路径(右 -> 左 -> 右)。

    示例 2:

    在这里插入图片描述

    输入:root = [1,1,1,null,1,null,null,1,1,null,1]
    输出:4
    解释:蓝色节点为树中最长交错路径(左 -> 右 -> 左 -> 右)。

    示例 3:
    输入:root = [1]
    输出:0

    提示:
    每棵树最多有 50000 个节点。
    每个节点的值在 [1, 100] 之间。

    2.思路

    (1)DFS
    参考本题官网题解

    3.代码实现(Java)

    //思路1————DFS
    /**
     * 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 {
    
        int res;
    
        public int longestZigZag(TreeNode root) {
            if (root == null) {
                return 0;
            }
            res = 0;
            dfs(root, true, 0);
            dfs(root, false, 0);
            return res;
        }
    
        private void dfs(TreeNode root, boolean dir, int len) {
            res = Math.max(res, len);
            if (dir) {
                //上一步方向为左
                if (root.left != null) {
                    dfs(root.left, true, 1);
                }
                if (root.right != null) {
                    dfs(root.right, false, len + 1);
                }
            } else {
                //上一步方向为右
                if (root.left != null) {
                    dfs(root.left, true, len + 1);
                }
                if (root.right != null) {
                    dfs(root.right, false, 1);
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    NumPy 切片和索引
    尚品汇电商项目总结
    FreeRTOS教程3 中断管理
    搭建solidity开发环境(以太坊)
    RL 实践(0)—— 及第平台辛丑年冬赛季【Rule-based policy】
    JAVA计算机毕业设计延安市图书馆管理Mybatis+系统+数据库+调试部署
    NR paging
    python-(4-2)数据类型的应用(列表)
    【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问
    Qt_C++读取RFID卡号支持Windows统信麒麟国产Linux系统
  • 原文地址:https://blog.csdn.net/weixin_43004044/article/details/133233884