1. 计算一棵二叉树有多少个节点
地址: https://mp.weixin.qq.com/s/LJbpo49qppIeRs-FbgjsSQ
2021/12/01
做题反思:
int count(TreeNode root) {
if (root == null) {
return 0;
}
int left = count(root.left);
int right = count(root.right);
int res = left + right + 1;
return res;
}
2. 寻找重复的子树(中等)
地址: https://leetcode-cn.com/problems/find-duplicate-subtrees/
2021/12/01
做题反思:通过拼接字符串的方式序列化二叉树
class Solution {
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
traverse(root);
return res;
}
// 集合泛型中用包装类
HashMap<String, Integer> memo = new HashMap<>();
// List 是接口, 应用其实现类
LinkedList<TreeNode> res = new LinkedList<>();
// 通过拼接字符串的方式序列化二叉树
String traverse(TreeNode root) {
if (root == null) {
return "#";
}
String left = traverse(root.left);
String right = traverse(root.right);
String subTree = left + "," + right + "," + root.val;
int freq = memo.getOrDefault(subTree, 0);
if (freq == 1) {
res.add(root);
}
memo.put(subTree, freq + 1);
return subTree;
}
}
/**
class Solution {
public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
traverse(root);
return res;
}
// 集合泛型中用包装类
HashMap<String, Integer> memo = new HashMap<>();
// List 是接口, 应用其实现类
LinkedList<TreeNode> res = new LinkedList<>();
// 通过拼接字符串的方式序列化二叉树
String traverse(TreeNode root) {
if (root == null) {
return "#";
}
String left = traverse(root.left);
String right = traverse(root.right);
String subTree = left + "," + right + "," + root.val;
int freq = memo.getOrDefault(subTree, 0);
if (freq == 1) {
res.add(root);
}
memo.put(subTree, freq + 1);
return subTree;
}
}
*/