[英]Find the maximum path sum between two leaves of a binary tree (Java)
我正在努力解決以下問題:“給定一個二叉樹,其中每個節點元素都包含一個數字。找到從一個葉節點到另一個葉節點的最大可能總和。最大總和路徑可能會或可能不會通過根。” 我想寫這里討論的 O(n) 解決方案: http : //www.geeksforgeeks.org/find-maximum-path-sum-two-leaves-binary-tree/但我有一個問題,因為 java 被傳遞價值。 有人可以幫忙嗎?
編輯:這是我的方法
private static int fromRoot(TreeNode root, int[] res){
if(root == null)
return 0;
int left = fromRoot(root.left, res) + root.val;
int right = fromRoot(root.right, res) + root.val;
int max = Math.max(Math.max(left, right), left+right+root.val);
if(max > res[0])
res[0] = max;
return Math.max(left, right);
}
int 變量res
我保存輸出。 這段代碼的作用是給出樹中所有節點的總和。
您的代碼與文章中的代碼明顯不同(並且與使用的語言無關)。
在您的代碼中,它是:
int left = fromRoot(root.left, res) + root.val;
int right = fromRoot(root.right, res) + root.val;
...
return Math.max(left, right);
但它應該是:
int left = fromRoot(root.left, res);
int right = fromRoot(root.right, res);
...
return Math.max(left, right) + root.val;
import math
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
def insert(root,node):
if root is None:
root=node
else:
if root.data<node.data:
if root.right is None:
root.right=node
else:
insert(root.right,node)
if root.data>node.data:
if root.left is None:
root.left=node
else:
insert(root.left,node)
def dfs(root):
queue=[root]
d=[]
while (queue):
node=queue.pop()
d.append(node.data)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return d
def lca(path1,path2):
i=0
j=0
while i<len(path1) and i<len(path2):
if path1[i]!=path2[i]:
break
i+=1
i-=1
j=i
max1=-math.inf
max2=-math.inf
while (i<len(path1)):
if path1[i]>max1:
max1=path1[i]
i+=1
while (j<len(path2)):
if path2[j]>max2:
max2=path2[j]
j+=1
return (max(max1,max2))
def search(root,path,val):
if root is None:
return path
elif root.data==val:
path.append(val)
return path
elif root.data<val:
path.append(root.data)
return search(root.right,path,val)
elif root.data>val:
path.append(root.data)
return search(root.left,path,val)
x=int(input())
z=list(map(int,input().split()))
root=Node(z[0])
for j in range(1,x):
insert(root,Node(z[j]))
a,b=list(map(int,input().split()))
path1=[]
p1=search(root,path1,a)
path2=[]
p2=search(root,path2,b)
print(lca(path1,path2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.