題目
給定乙個二叉樹,任意兩個節點之間必然是有一條路徑相通的,假定父節點和它的孩子節點的距離為單位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 ...