二叉樹中的最大路徑和(python實現)

2021-09-26 12:53:58 字數 2651 閱讀 1133

題目描述:

給定乙個非空二叉樹,返回其最大路徑和。

本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。

示例 1:

輸入: [1,2,3]

1

/ \2 3

輸出: 6

示例 2:

輸入: [-10,9,20,null,null,15,7]

-10/

9 20

/ 15 7

輸出: 42

思路:1、遞迴思想計算最大值(max=左支最大+右支最大)。

2、層序遍歷每個節點,計算以這個節點為中心的最長路徑,從中選取最大的作為最終結果。

**:

import tree

class solution(tree.tree):

def maxpathsum(self,root):

mq=node=root

self.max=-9999999

while mq:

node=mq.pop(0)

self.digui(node)

if self.max_>self.max:

self.max=self.max_

if node.lchild:

if node.rchild:

return self.max

def digui(self,root):

if root==none:

return 0

left=max(self.digui(root.lchild),0)

right=max(self.digui(root.rchild),0)

if root.e==none:

root.e=0

self.max_=root.e+left+right

return root.e+max(left,right)

if __name__=='__main__':

treenode=[-10,9,20,none,none,15,7]

t=tree.tree()

for i in treenode:

t.add(i)

path=solution().maxpathsum(t.root)

print("二叉樹的最大路徑和為:"+str(path))

執行結果:

二叉樹的最大路徑和為:42

樹結構的實現:

class node(object):

def __init__(self,e=none,lchild=none,rchild=none):

self.e=e

self.lchild=lchild

self.rchild=rchild

#樹類class tree(object):

def __init__(self,root=node(none,none,none)):

self.root=root

self.height=0

self.myqueue=

#按層序新增節點到樹中

def add(self,e):

node=node(e)

if self.root.e==none:

self.root=node

if not node==none:

self.height+=1

else:

treenode=self.myqueue[0]

if treenode.lchild==none:

treenode.lchild=node

if not node==none:

self.height+=1

else:

treenode.rchild=node

self.myqueue.pop(0)

#層序遍歷

def level(self):

if self.root==none:

return

mq=node=self.root

while mq:

node=mq.pop(0)

print(node.e)

if node.lchild:

if node.rchild:

#前序遍歷

def front(self,root):

if root==none:

return

print(root.e)

self.front(root.lchild)

self.front(root.rchild)

#中序遍歷

def middle(self,root):

if root==none:

return

self.middle(root.lchild)

print(root.e)

self.middle(root.rchild)

#後序遍歷

def post(self,root):

if root==none:

return

self.post(root.lchild)

self.post(root.rchild)

print(root.e)

二叉樹最大路徑和 python 二叉樹最大路徑和

1.題目描述 輸入乙個二叉樹層次遍歷的結果,輸出這個二叉樹最大路徑和。路徑不一定從根節點開始和葉子節點結束。只要是連續的路徑就可以。如輸入 10,9,20,null,null,15,7 109 20 15 7 輸出 42 2.首先將乙個陣列還原成乙個二叉樹。然後根絕二叉樹的根節點返回最大路徑和。cl...

二叉樹最大路徑和

每個節點不可以重複經過求,求二叉樹的最大路徑和。二叉樹如圖 本文採用深度優先演算法解題。假設每個節點都有兩個屬性,s stop c continue s屬性為,該節點及其以下節點的不停止走法最大值。c屬性為在還有路可走的情況下的最大值。舉例說明 node4節點,有兩條路可走 路線一和路線二 路線一意...

二叉樹中的最大路徑和

給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。示例 1 輸入 1,2,3 1 2 3 輸出 6 示例 2 輸入 10,9,20,null,null,15,7 10 9 20 15 7 輸出 42最大路...