LeetCode 第 B 题:二叉树任意两节点之间的最短路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 第 B 题:二叉树任意两节点之间的最短路径相关的知识,希望对你有一定的参考价值。

参考技术A 题目描述:一棵二叉树 root,给定两个节点 p、q,求 p、q 之间的距离,也就是从 p 到 q 的距离。

这道题是两年前实习的时候,才云科技问的题目(当时投的算法岗 QAQ),奈何当时基础很差,没答出来,也听不懂。

此题的思路是,先求两个节点的最近公共祖先,然后从最近公共祖先出发,求祖先节点到两个节点的距离,距离之和就是两个节点的最短路径。

最强解析面试题:二叉树两节点最大距离

目录

最强解析面试题:二叉树两节点最大距离

题目

思路

代码

附录


 

最强解析面试题:二叉树两节点最大距离

题目

从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路径上的节点数叫作 A 到 B 的距离。现在给出一棵二叉树,求整棵树上每对节点之间的最大距离。例如下图二叉树的节点间最大距离为节点5到节点7的距离为5。

思路

关注我 code 杂坛,了解更多......

二叉树的最大距离,是某一节点左右子树之间的距离,这一节点可能是根节点也可能是其他节点。所以,我们需要找出每个节点左右子树的最大距离中的最大;而左右子树的距离就是树的高度。

代码

package main

import "fmt"

type TreeNode struct
    Val int
    Left *TreeNode
    Right *TreeNode


var sum int

func main () 
    a:=new(TreeNode)
    a.Val = 0
    b:=new(TreeNode)
    b.Val = 1
    c:=new(TreeNode)
    c.Val = 2
    d:=new(TreeNode)
    d.Val = 3
    e:=new(TreeNode)
    e.Val = 4
    
    f:=new(TreeNode)
    f.Val = 5
    g:=new(TreeNode)
    g.Val = 6
    h:=new(TreeNode)
    h.Val = 6
    
    a.Left= b
    a.Right = c

    b.Left = d
    b.Right = e
    
    c.Left = f
    c.Right = g
    g.Right = h

    fmt.Println("hello https://tool.lu/ tree max high",GetMax(a))
    fmt.Println("hello https://tool.lu/",sum)


func GetMax(root *TreeNode) int
    if root == nil 
        return 0
    
    l := GetMax(root.Left)
    r := GetMax(root.Right)
    if sum < l+r
        sum = l +r
    
    if l > r
        return l+1
    
    return r+1

附录

编程题这种东西,需要花时间去练习。

从来不认为面试这些东西有多大用,真正知道要招什么样的人,从谈话的深度和广度就能了解,实际开发中,这个练习帮助不大。

关注我 code 杂坛,了解更多......

以上是关于LeetCode 第 B 题:二叉树任意两节点之间的最短路径的主要内容,如果未能解决你的问题,请参考以下文章

精选力扣500题 第50题 LeetCode 543. 二叉树的直径c++详细题解

算法进阶面试题05——树形dp解决步骤返回最大搜索二叉子树的大小二叉树最远两节点的距离晚会最大活跃度手撕缓存结构LRU

⭐算法入门⭐《二叉树 - 二叉搜索树》简单07 —— LeetCode 530. 二叉搜索树的最小绝对差

算法题之求二叉树的最大距离

LeetCode第124题—二叉树中的最大路径和—Python实现

二叉树刷题篇(11) 二叉搜索树的最小绝对差与众数