4

假设有如下图所示的数据结构:

WechatIMG2.png

转换成为 js 代码为如下结构:

const chainNode = {
  value: 1,
  left: {
    value: 2,
    left: {
      value: 4,
      left: {
        value: 7
      }
    }
  },
  right: {
    value: 3,
    left: {
      value: 5,
      left: {
        value: 8
      }
    },
    right: {
      value: 6,
      left: {
        value: 9
      },
      right: {
        value: 10
      }
    }
  }
}

求所有链条数字之和,如下所示:
1 + 2 + 4 + 7 +
1 + 3 + 5 + 8 +
1 + 3 + 6 + 9 +
1 + 3 + 6 + 10

解题思路:
1、如上图所示共有 4 个末端节点分别为 7 、8 、9 、10
2、求末端节点以及其祖先节点的总和 currentChainSum 并叠加到最终总和 total 里

function getChainSum(chainNode) {
      // 总和
      let total = 0 
      // 叠加计算器
      const accumulator = (chainNode, prevChainSum = 0) => {
        const {value, left, right} = chainNode
        // 当前节点的值 + 当前节点的所有父节点之和
        const currentChainSum = value + prevChainSum
        // 如果有 left 节点则继续叠加
        left && accumulator(left, currentChainSum)
        // 如果有 right 节点则继续叠加
        right && accumulator(right, currentChainSum)
        // 当节点到达末端时叠加总和
        if (!left && !right) {
          total += currentChainSum
        }
      }
      accumulator(chainNode)
      return total
    }

哈哈落叶
8 声望5 粉丝

老忘,就写写吧


« 上一篇
语义化版本