主要代碼:
int ans = INT_MIN;
int oneSideMax(TreeNode* root) {
? ? if (root == nullptr) return 0;
? ? int left = max(0, oneSideMax(root->left));
? ? int right = max(0, oneSideMax(root->right));
? ? ans = max(ans, left + right + root->val);
? ? return max(left, right) + root->val;
}
心得:? ?
? ? 1.二叉樹的? 前中后序遍歷? 是個(gè)框架,根據(jù)題目特點(diǎn)物臂,需要在遞歸過程中取值做相應(yīng)計(jì)算
? ? ? ——框架的重點(diǎn)在于 : 二叉樹遍歷順序(前中后遍歷)、遞歸函數(shù)返回值?
? ? ? ——框架細(xì)節(jié):當(dāng)前遞歸所需保存的中間值为牍,根據(jù)題目要求做中間計(jì)算能颁、計(jì)算結(jié)果為:返回值和貫穿整個(gè)遞歸過程所需要維護(hù)的變量(本題為最大值ans)
? ? 2.本題二叉樹定義如下:
路徑被定義為一條從樹中任意節(jié)點(diǎn)出發(fā)杂瘸,達(dá)到任意節(jié)點(diǎn)的序列。該路徑至少包含一個(gè)節(jié)點(diǎn)伙菊,且不一定經(jīng)過根節(jié)點(diǎn)
????——路徑由節(jié)點(diǎn)組成败玉,節(jié)點(diǎn)為二叉樹的節(jié)點(diǎn),二叉樹的創(chuàng)建為遞歸創(chuàng)建镜硕,故可把當(dāng)前子樹的最大值歸到當(dāng)前子樹的根節(jié)點(diǎn)上(代碼體現(xiàn)在返回值)
????——本題為二叉樹的路徑問題运翼、求最值(節(jié)點(diǎn)value累和)
????————?jiǎng)澐中《巫勇窂剑鹤訕涞淖庸?jié)點(diǎn)取大值歸到子樹根節(jié)點(diǎn)
????————宏觀來看整條路徑,任意節(jié)點(diǎn)到任意節(jié)點(diǎn)兴枯,路徑在二叉樹中的最高節(jié)點(diǎn)的中序遍歷取累和血淌,不斷的更新ans取最大值
? ? 3.對(duì)于存在負(fù)數(shù)節(jié)點(diǎn)的處理:化為0,路徑上表現(xiàn)為不經(jīng)過此節(jié)點(diǎn)