本题需要比较以下四种情况的值
1、 root节点本身的值
2、root和左子树的值
3、root和右边子树的值
4、root和左右子树的值
需要注意的是,第四种情况下,root的左右节点中只选取一条路径,不能跨国左右子树的节点,这是因为选一条路径
需要在局部维护一个sum变量,全局维护一个maxSum变量。一旦在递归中计算的子树发现比maxSum大的时候,就用sum去更新maxSum节点。这样可以有效求出来究竟是子树的值较大还是横跨根节点的值更大
在每一层中,如果左右子树的节点值为正整数,就加上左子树和右子树的值。之后进入比较,查看是否有更新,如果没有,返回maxSum作为当前根节点的子树的最大值得路径
代码实现核心如下:
代码截图可以看到,当且仅当左右子树大于0的时候,才会返回加和,否则只使用root的值作为返回
网友评论