二叉樹問題 二叉樹節點間的最大距離

2021-10-05 20:34:20 字數 1441 閱讀 2366

從二叉樹的節點 a 出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點 b 時,路徑上的節點數叫作 a 到 b 的距離。現在給出一棵二叉樹,求整棵樹上每對節點之間的最大距離。例如下圖二叉樹的節點間最大距離為節點5到節點7的距離為5。

乙個以h為根節點的樹上,最大的距離只可能來自以下三種情況:

1)h左子樹上的最大距離

2)h右子樹上的最大距離

3)h左子樹上離h.left最遠的距離+h右子樹上離h.right最遠的距離+1

#定義二叉樹的節點

class

treenode

:def

__init__

(self,x)

: self.val=x

self.left=

none

self.right=

none

#求解節點間的最大距離

class

solution

:def

maxdistance

(self,root)

:def

maxdisanddepth

(root):if

not root:

return[0

,0]#儲存當前節點[最大距離,樹的高度]

leftdata=maxdisanddepth(root.left)

#訪問左子樹

rightdata=maxdisanddepth(root.right)

#訪問右子樹

height=

max(leftdata[1]

,rightdata[1]

)+1#計算當前節點的高度

maxdis=

max(

max(leftdata[0]

,rightdata[0]

),leftdata[1]

+rightdata[1]

+1)#計算當前節點的最大距離

return

[maxdis,height]

return maxdisanddepth(root)[0

]if __name__==

"__main__"

: t1=treenode(1)

t2=treenode(4)

t3=treenode(3)

t4=treenode(5)

t5=treenode(7)

t1.left=t2

t1.right=t3

t2.right=t4

t3.right=t5

s=solution(

)print

(s.maxdistance(t1)

)

二叉樹節點間的最大距離問題

題目 二叉樹中,乙個節點可以往上走和往下走,那麼從節點a總能走到節點b。節點a走到節點b的距離為 a走到b最短路徑上的節點個數。求一棵二叉樹上的最遠距離。public class maxdistanceintree public static class returntype public stat...

二叉樹節點間的最大距離

問題 從二叉樹節點 出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點 時,路徑上的節點數叫做 到 的距離。基本思路 乙個以 為頭的樹上,最大的距離只可能來自以下三種情況 左子樹上的最大距離 右子樹上的最大距離 左子樹上離h.left最遠的距離 右子樹上離h.right最遠的距離 三個值...

二叉樹節點的最大距離

程式設計之美3.10節。完整 如下 view code 1 include 2 include 3 include 4 include 5 include 6 include 7 using namespace std 89 struct node 1018 19 20void createtree...