題目描述:
給定乙個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。
示例 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最大路...