欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 力扣每日一题:1372.二叉树中的最长交错路径

力扣每日一题:1372.二叉树中的最长交错路径

2025/5/3 17:55:34 来源:https://blog.csdn.net/m0_73927143/article/details/142166961  浏览:    关键词:力扣每日一题:1372.二叉树中的最长交错路径

题目

给你一棵以 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] 之间。

思路:

题目的路线要求左变右,右变左,那么我们可以记录在每次dfs时记录上一次路线是左边还是右边。然后比较这次走左边和走右边的大小。
如果上一次是走左边,那么这一次走右边的len就加1,这一次还是走左边的len就归0.
同理右边也是一样。
n记录上一次走的是左边还是右边
 //1表示走左边,-1表示走右边

class Solution {public int longestZigZag(TreeNode root) {return Math.max(dfs(root.left,1,0),dfs(root.right,-1,0));}public int dfs(TreeNode root,int n,int len){   //n记录上一次走的是左边还是右边//1表示走左边,-1表示走右边if(root==null){return len;}if(n==1){return Math.max(dfs(root.right,-1,len+1),dfs(root.left,1,0));}else{return Math.max(dfs(root.left,1,len+1),dfs(root.right,-1,0));}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词