日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树的最长的路径长度最大路径和

發(fā)布時間:2024/4/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树的最长的路径长度最大路径和 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目

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

分析

  這是一個簡單的動態(tài)規(guī)劃問題,假設(shè)某個節(jié)點(diǎn)node,到它的最低葉節(jié)點(diǎn)的長度為len(node),所求的最長路徑必然經(jīng)過一個最高節(jié)點(diǎn)high_node,

則它到最低葉節(jié)點(diǎn)的長度為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) {if (root->pLeft==NULL&&root->pRight==NULL){return 0;}int left_len=0,right_len=0;if (root->pLeft!=NULL){left_len=MaxDistance(root->pLeft,max)+1;}if (root->pRight!=NULL){right_len=MaxDistance(root->pRight,max)+1;}int sum=left_len+right_len+2;*max=(*max>sum)?*max:sum;return (left_len>right_len)?left_len:right_len; }

最大路徑和問題

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

同樣,假設(shè)某個節(jié)點(diǎn)node,到它的最低葉節(jié)點(diǎn)的長度為sum(node),所求的最長路徑必然經(jīng)過一個最高節(jié)點(diǎn)high_node,

則它到最低葉節(jié)點(diǎn)的長度為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) {int val=root->value;if (root->pLeft==NULL&&root->pRight==NULL){return val;}int left=0,right=0;if (root->pLeft!=NULL){left=MaxPathSum(root->pLeft,maxsum)+val;}if (root->pRight!=NULL){right=MaxPathSum(root->pRight,maxsum)+val;}int sum=left+right-val;*maxsum=(*maxsum>sum)?*maxsum:sum;return (left>right)?left:right;}

?

總結(jié)

以上是生活随笔為你收集整理的二叉树的最长的路径长度最大路径和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。