如何使用一行代码遍历二叉树累加求值?
Posted 耳东蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用一行代码遍历二叉树累加求值?相关的知识,希望对你有一定的参考价值。
问题背景
如何想起里这个问题的,主要是在给成员讲解数组reduce方法的时候想到的。
传给 reduce()和 reduceRight()的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项
讲到函数返回的任何值都会作为第一个参数自动传给下一项的好处。
二叉树遍历计算求值问题 【不借助变量去计算所有节点累加值】
var a = [
count: 1,
name: 'a',
children: [
count: 2,
name: 'b',
children: [
count: 3,
name: 'c'
,
count: 4,
name: 'd'
]
,
count: 5,
name: 'e',
children: [
count: 6,
name: 'f'
,
count: 7,
name: 'g'
]
]
]
解决思路
不借助变量计算数据的话,那就只有可以自主进行数值计算。正好可以借用这个方法的特性实现,然后一行代码的情况就需要考虑带自调用,然后具有一定的链式效果。
实现方法
var a = [
count: 1,
name: 'a',
children: [
count: 2,
name: 'b',
children: [
count: 3,
name: 'c'
,
count: 4,
name: 'd'
]
,
count: 5,
name: 'e',
children: [
count: 6,
name: 'f'
,
count: 7,
name: 'g'
]
]
]
console.log((function countF(a)
return a.reduce(function(x, y)
if (y.children)
// 存在子节点的情况下
return x + y.count + countF(y.children)
else
// 不存在子节点的情况下
return x + y.count
,
0)
)(a))
返回结果
以上是关于如何使用一行代码遍历二叉树累加求值?的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 二叉树专项把二叉搜索树转换为累加树(538)