节点深度求和算法疑问:stack.pop()解构及depth逐次+1的作用
这段代码是通过栈实现迭代式深度优先遍历,统计二叉树所有节点的深度总和,针对两个疑问解答如下:
解构node和depth的作用
栈中存储的每个元素都是绑定了节点和对应深度的对象:
node是当前待处理的二叉树节点depth是这个节点对应的深度值
使用对象解构语法可以直接从栈弹出的对象中提取这两个属性,本质等价于普通的对象属性访问:
// 解构写法等价于下方的普通写法 const stackItem = stack.pop(); const node = stackItem.node; const depth = stackItem.depth;
这种写法可以简化代码,避免重复书写对象属性访问语句,可读性更高。
压栈时depth + 1的原因
根据题目定义,节点深度是该节点到根节点的距离,子节点的深度一定比其父节点大1。
当前处理的节点是父节点,它的左、右子节点的层级比父节点低1层,所以在把左右子节点压入栈时,需要给子节点绑定的深度设置为当前父节点深度 + 1,后续弹出子节点处理时,拿到的深度就是符合定义的准确值,累加到总和的结果才正确。
举个简单例子验证:
- 初始栈中根节点深度为0,弹出后累加0到总和,压入根节点的左右子节点,深度设为0+1=1
- 后续弹出子节点时,拿到的深度是1,累加1到总和,再压入该子节点的左右节点,深度设为1+1=2
- 以此类推,所有节点的深度计算都符合定义
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

