首页 > 其他分享 >【二叉树】二叉树中的最长交错路径

【二叉树】二叉树中的最长交错路径

时间:2022-10-24 19:32:42浏览次数:55  
标签:right TreeNode val self 路径 二叉树 交错 节点 left


0x00 题目

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

选择二叉树中 ​​任意​​​ 节点和一个方向(​​左​​​或者​​右​​​)
如果前进方向为​​​右​​​,那么移动到当前节点的的​​右​​​子节点
否则移动到它的​​​左​​​子节点
改变前进方向:​​​左变右​​​或者​​右变左​​​ 重复第二步和第三步,直到你在树中​​无法​​继续移动
交错路径的长度定义为:
访问过的节点​​数目 - 1​​(单个节点的路径长度为 0 )

请你返回给定树中最长 交错路径 的长度


0x01 思路

采用​​深度​​​优先遍历的方式
遍历​​​下​​​一个子节点时
是能区分出该节点是​​​左​​​节点,还是​​右​​​节点的
通过为每个节点缓存 ​​​2​​​ 个值
一个左值 ​​​left​​​,表示本节点为​​左节点​​​时,到达所需​​路径数​​​ 一个右值 ​​right​​,表示本节点为​​右节点​​时,到达所需​​路径数​​ 因为节点要么是​​左​​节点,要么是​​右​​节点
所以两个值,必需有一个为 ​​0​​ 另外一个,根据本节点是​​左​​是​​右​​来确定
是​​左​​节点,则使用父节点的​​右值 + 1​​ (rihgt + 1)
是​​右​​节点,则使用父节点的​​左值 + 1​​ (left + 1)
最后使用一个​​全局​​变量
保存最大值即可


0x02 解法

语言:​​Swift​

树节点:​​TreeNode​

public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}

解法:

func longestZigZag(_ root: TreeNode?) -> Int {
var res: Int = 0

func dfs(_ root: TreeNode?, _ left: Int, _ right: Int) {
// 最大长度
res = max(res, max(left, right))

// 左子树存在,往右
if let l = root?.left {
dfs(l, right+1, 0)
}

// 右子树存在,往左
if let r = root?.right {
dfs(r, 0, left+1)
}
}

dfs(root, 0, 0)
return res
}

0x03 我的小作品

欢迎体验我的作品之一:​​小五笔​​​ 五笔学习好帮手!
​App Store​​ 搜索即可~



标签:right,TreeNode,val,self,路径,二叉树,交错,节点,left
From: https://blog.51cto.com/u_15844020/5791042

相关文章

  • 【二叉树】最大层内元素和
    0x00题目给你一个二叉树的根节点​​root​​​设根节点位于二叉树的第​​1​​层而根节点的子节点位于第​​2​​层依此类推请返回层内元素之和​​​最大​​......
  • SpringBoot代理图片、文件等路径
    在config文件夹下新增一个配置类即可 /***@authorcyl*@time2022/10/24*/@ConfigurationpublicclassMyWebAppConfigurationextendsWebMvcConfigurerAda......
  • 数据结构---二叉树
    二叉树的结构体:左右子树指针(Tree*) 值(int)typedefstructTree{chardata;structTree*lchild,*rchild;}*BiTree;二叉树的先序创建BiTreeCreate(......
  • Windows10内置Linux子系统(WSL)路径转换
    在使用WSL中,因为Windows和Linux路径语法不同问题,cd到某一个目录比较麻烦。因为wsl中有一个工具专门用于路径转换用于提供便利性。语法:wslwslpath[option][path]optio......
  • 2022.10.20-C 二叉树
    题意有一颗二叉树,满足一个结点要么是叶子结点,要么有两个儿子。同时,不存在一个叶子结点,使得它到根的路径上经过了\(\gem\)条向左的边。(左右子树有区别)对于\(1\lek\l......
  • 骨骼跟随路径:IK样条线约束
    骨骼跟随路径: 创建没有IK链的骨骼结构。选择解算器开始位置的骨骼或对象。选择“动画”菜单>“IK解算器”>“样条线IK解算器”。在视口中,将光标移动......
  • 解决vs code C语言编译路径丢失问题的一些思考
    -问题说明: 本人算是刚接触c语言的萌新,配置vscode编译环境时费了不少波折。今天我删除掉了一个包含mingw的文件(这个文件是本人下载过的两个编译器其中的一个,因为无法确认......
  • 数据结构【C语言版】二叉树的结构和遍历的实现
    数据结构【C语言版】二叉树的结构和遍历的实现1.二叉树的存储结构二叉树一般分为两种存储结构,一种是顺序结构,一种是链表结构。顺序结构顺序结构存储就是使用数组来......
  • 深度优先搜索求最短路径DFS C#实现
    搜索效果 C#项目文件可以点击下载   搜索最短路径的代码:///<summary>///DFS求最短路径///</summary>///<paramname="cX">当前点X坐标</param>///<par......
  • 解决问题的最佳实践路径
    转载:https://www.cnblogs.com/imyalost/p/16480440.html上周应CC邀请,给部分同学做了一次《测试人员如何保持不断成长》为主题的分享。分享后同学们反馈分享的内容干货满满......