1.左叶子之和
题目链接(https://leetcode-cn.com/problems/sum-of-left-leaves/submissions/)
- 题目描述:
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
- 思路:深度优先遍历 dfs, 遇到左节点就加入即可
class Solution {
int sum = 0;
public int sumOfLeftLeaves(TreeNode root) {
if(root == null){
return 0;
}
dfs(root, 0);
return sum;
}
public void dfs(TreeNode root, int count){
if(root.left == null && root.right == null && count == 1){
sum += root.val;
}
if(root.left != null){
dfs(root.left, 1);
}
if(root.right != null){
dfs(root.right, -1);
}
}
}
2.子集
题目链接:(https://leetcode-cn.com/problems/subsets/)
- 题目描述:
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
- 思路:遍历,遇到就一直加,一直加到最后即可
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
//空集也是子集
res.add(new ArrayList<>());
for(int i = 0; i < nums.length; i++){
int all = res.size();
for(int j = 0; j < all; j++){
List<Integer> list = new ArrayList<>(res.get(j));
list.add(nums[i]);
res.add(list);
}
}
return res;
}
}