二叉樹的最長的路徑長度和最大路徑和

2021-08-14 10:50:44 字數 1527 閱讀 1255

題目

給定乙個二叉樹,任意兩個節點之間必然是有一條路徑相通的,假定父節點和它的孩子節點的距離為單位1,求二叉樹中相距最遠的兩個節點間的路徑長度

分析

這是乙個簡單的動態規劃問題,假設某個節點node,到它的最低葉節點的長度為len(node),所求的最長路徑必然經過乙個最高節點high_node,

則它到最低葉節點的長度為len(high_node)=max(len(high_node->left),len(high_node->right))+1,路徑長度為sum=len(high_node->left)+len(high_node->right)+2;

**

int maxdistance(treenode* root,int* max)

2 7

8 int left_len=0,right_len=0;

9 if (root->pleft!=null)

10

13 if (root->pright!=null)

14

17 18 int sum=left_len+right_len+2;

19 *max=(*max>sum)?*max:sum;

20 21 return (left_len>right_len)?left_len:right_len;

22 }

最大路徑和問題

下面再看最大路徑和問題(路徑和為兩個節點之間所在路徑上的節點權值之和)。這個問題和上題非常相似,只不過是把單位距離換成了節點上的權值而已。

同樣,假設某個節點node,到它的最低葉節點的長度為sum(node),所求的最長路徑必然經過乙個最高節點high_node,

則它到最低葉節點的長度為sum(high_node)=max(sum(high_node->left),sum(high_node->right))+high_node->value,路徑和path_sum=sum(high_node->left)+sum(high_node->right)+high_node->value;

int maxpathsum(treenode* root,int* maxsum)

2 8

9 int left=0,right=0;

10 if (root->pleft!=null)

11

14 if (root->pright!=null)

15

18 19 int sum=left+right-val;

20 *maxsum=(*maxsum>sum)?*maxsum:sum;

21 22 return (left>right)?left:right;

23 24 }

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

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

二叉樹的最大路徑和

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

二叉樹的最大路徑和

路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。使用前序來建立樹 tnode createtree else returnt 類似這種來建立二叉樹 以上為解題思路。然後就是演算法的實現 int maxgain tnode root,int val ...