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

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:二叉树两节点最大距离相关的知识,希望对你有一定的参考价值。

目录

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

题目

思路

代码

附录


 

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

题目

从二叉树的节点 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 杂坛,了解更多......

以上是关于最强解析面试题:二叉树两节点最大距离的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法面试题80道(11)

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

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

二叉树求两节点最低公共祖先,求随意两节点距离

二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)

11.求二叉树中节点的最大距离