二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root
,返回其 最大路径和 。
思路一:递归
int ans;
int dfs(struct TreeNode*root){
if(root==NULL)return 0;
int left = fmax(0,dfs(root->left));
int right = fmax(0,dfs(root->right));
ans = fmax(ans,left+right+root->val);
return fmax(left,right)+root->val;
}
int maxPathSum(struct TreeNode* root){
ans = INT_MIN;
dfs(root);
return ans;
}
分析:
本题要向下不断递归二叉树,将左右子树中最大值设为ans最后输出ans即最大路径和,ans先设置为int_min方便后续操作,dfs函数返回fmax(left,right)+root->val;
总结:
本题考察递归查找路径问题,将二叉树递归调用左右子树操作熟悉后可解决