最近在外留学的BOSS大人问了我一道问题:
二叉树,求路径的乘积最大值。这里的路径,可以是根到叶结点,也可以是叶结点到叶结点,也可以是任意结点到任意结点,总之只要是一条路径就可以了。比如这张图中的maxProduct,就是5*-2 *3*4*-2=240。
原题目如下:
我的思路是:使用一个maxProductWithThisNode方法,来返回包含这个结点的最大乘积[负数,正数]。注意该乘积是:往下延伸最多延伸一边,即:要么是该结点值*左子结点的最大乘积,要么是该结点值*右子结点的最大乘积,要么直接是该结点值。
因为是乘积,有可能“左结点的最小负数*右结点的最小负数”能够算到最大正数。所以既要考虑到“绝对值最大的负数”,又要考虑到“正数”,因此需要返回的是一个包含两个数的数组,数组中第一个数表示“绝对值最大的负数”,数组中第二个数表示“最大的正数”,如果不存在就设为null。
在递归(从叶到根回溯)得到每个结点的数组返回值时,在这个过程中我们希望求得包含这个结点