LeetCode(563 二叉树坡度)
程序员文章站
2022-04-25 20:21:59
...
如题
很显然需要用到递归,但是不适合从上至下穷举,那样对元素和的运算会有浪费。那么转换流程为从底部开始运算,计算节点坡度的同时缓存元素和
static int num=0; //坡度
public static int findTilt(TreeNode root) {
Sum(root); //包括自己在内的子元素之和
return num;
}
static int Sum(TreeNode root) {
if(root == null) {
return 0;
}
int lsum=Sum(root.left);//左子树元素和
int rsum=Sum(root.right);//右子树元素和
num+=Math.abs(lsum-rsum);//加上当前左右子树差
return root.val+lsum+rsum;
}
提交时去掉static,很直观的写法,直接递归求子树元素和。
换一种写法,直接通过return控制递归findTilt方法
public static int findTilt1(TreeNode root) {
if(root !=null) {
if(root.left!=null) {
findTilt1(root.left); //递归更新val及num 注意不能return
}
if(root.right!=null) {
findTilt1(root.right);
}
root.val=root.val+(root.left==null?0:root.left.val)+(root.right==null?0:root.right.val);//更新节点元素为子树所有元素之和
num+=Math.abs((root.left==null?0:root.left.val)-(root.right==null?0:root.right.val)); //更新num
}
return num;
}
仅仅是写法不一样,结果是完全相同的
上一篇: 递归
推荐阅读
-
Leetcode算法【114. 二叉树展开为链表】
-
二叉树(LeetCode) C++相关知识代码 系列1
-
荐 八十一、Python | Leetcode 二叉树系列(下篇)
-
C++实现LeetCode(105.由先序和中序遍历建立二叉树)
-
C++实现LeetCode(889.由先序和后序遍历建立二叉树)
-
C++实现LeetCode(106.由中序和后序遍历建立二叉树)
-
leetcode 面试题32 (剑指offer)- II. 从上到下打印二叉树 II(python3)
-
leetcode 113 剑指offer 面试题34. 二叉树中和为某一值的路径(python3)
-
leetcode 面试题32 - III. 从上到下打印二叉树 III(python3)
-
LeetCode第958题 二叉树的完全性检验