主要代码:
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.二叉树的 前中后序遍历 是个框架,根据题目特点,需要在递归过程中取值做相应计算
——框架的重点在于 : 二叉树遍历顺序(前中后遍历)、递归函数返回值
——框架细节:当前递归所需保存的中间值,根据题目要求做中间计算、计算结果为:返回值和贯穿整个递归过程所需要维护的变量(本题为最大值ans)
2.本题二叉树定义如下:
路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点
——路径由节点组成,节点为二叉树的节点,二叉树的创建为递归创建,故可把当前子树的最大值归到当前子树的根节点上(代码体现在返回值)
——本题为二叉树的路径问题、求最值(节点value累和)
————划分小段子路径:子树的子节点取大值归到子树根节点
————宏观来看整条路径,任意节点到任意节点,路径在二叉树中的最高节点的中序遍历取累和,不断的更新ans取最大值
3.对于存在负数节点的处理:化为0,路径上表现为不经过此节点
网友评论