算法实现:二叉树路径上的结点最大乘积

本文探讨了如何在二叉树中找到路径上节点的最大乘积。算法思路是通过`maxProductWithThisNode`方法计算包含当前节点的最大乘积,考虑负数和正数的影响。在递归回溯过程中,根据不同情况更新结果:无子节点时取节点值,单侧子节点时取最大正数,双侧子节点时根据节点值的正负选择最大乘积组合。
摘要由CSDN通过智能技术生成
最近在外留学的BOSS大人问了我一道问题:

二叉树,求路径的乘积最大值。这里的路径,可以是根到叶结点,也可以是叶结点到叶结点,也可以是任意结点到任意结点,总之只要是一条路径就可以了。比如这张图中的maxProduct,就是5*-2 *3*4*-2=240。

原题目如下:


我的思路是:使用一个maxProductWithThisNode方法,来返回包含这个结点的最大乘积[负数,正数]。注意该乘积是:往下延伸最多延伸一边,即:要么是该结点值*左子结点的最大乘积,要么是该结点值*右子结点的最大乘积,要么直接是该结点值。

因为是乘积,有可能“左结点的最小负数*右结点的最小负数”能够算到最大正数。所以既要考虑到“绝对值最大的负数”,又要考虑到“正数”,因此需要返回的是一个包含两个数的数组,数组中第一个数表示“绝对值最大的负数”,数组中第二个数表示“最大的正数”,如果不存在就设为null。

在递归(从叶到根回溯)得到每个结点的数组返回值时,在这个过程中我们希望求得包含这个结点

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值