【LeetCode】二叉树的坡度 Java 题解
题目描述
给定一个二叉树,计算 整个树 的坡度 。
一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树 的坡度就是其所有节点的坡度之和。
复制代码
思路分析
今天的算法每日一题是二叉树题目,题干较长,题目要求求出节点的坡度之和。节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值。
根据题目描述,我们需要遍历整个二叉树的每一个节点。常用的遍历算法是 DFS 和 BFS。结合这个题目,DFS 更加适合。
DFS 递归的终止条件是 node == null, 分别求出左右子树节点之和,然后相减,即为当前节点坡度。同时,使用 leftSum + rightSum + node.val,即可快速求出 node 作为根结点的树的结点之和。这里很巧妙。具体实现代码如下:
通过代码
复制代码
总结
上述代码的时间复杂度是 O(n),空间复杂度是 O(1)
二叉树题目常见的求解方式是 DFS,BFS,我们也要熟练使用。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/2ac8dc20c2a13dbafffddf61b】。文章转载请联系作者。
评论