给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
例如:
给定 BST [1,null,2,2]
,
1
\
2
/
2
class Solution {
int base;
int count;
int maxCount;
List<Integer> ans = new ArrayList<>();
public int[] findMode(TreeNode root) {
dfs(root);
int[] temp = new int[ans.size()];
for (int i = 0; i < ans.size(); i++) {
temp[i] = ans.get(i);
}
return temp;
}
public void dfs(TreeNode root) {
if (root == null) {
return;
}
dfs(root.left);
update(root.val);
dfs(root.right);
}
public void update(int val) {
if (val == base) {
count++;
} else {
count = 1;
base = val;
}
if (count == maxCount) {
ans.add(base);
}
if (count > maxCount) {
maxCount = count;
ans.clear();
ans.add(val);
}
}
}
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 1:
输入: candies = [1,1,2,2,3,3]
输出: 3
解析: 一共有三种种类的糖果,每一种都有两个。
最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
class Solution {
public int distributeCandies(int[] candyType) {
Set<Integer> set = new HashSet<>();
for (int i : candyType) {
set.add(i);
}
return Math.min(candyType.length / 2, set.size());
}
}
给定一个 N 叉树,返回其节点值的 前序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null
分隔(请参见示例)。
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> ans = new ArrayList<>();
fun(root, ans);
return ans;
}
public void fun(Node root, List<Integer> ans) {
if (root == null) {
return;
}
ans.add(root.val);
for (Node i : root.children) {
fun(i, ans);
}
}
}
class Solution {
public List<Integer> preorder(Node root) {
LinkedList<Node> stack = new LinkedList<>();
List<Integer> ans = new LinkedList<>();
if (root == null) {
return ans;
}
stack.add(root);
while (!stack.isEmpty()) {
Node node = stack.pollLast();
ans.add(node.val);
Collections.reverse(node.children);
for (Node n : node.children) {
stack.add(n);
}
}
return ans;
}
}
给定一个二叉树,返回其节点值的 前序遍历 。
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
Deque<TreeNode> stack = new LinkedList<>();
if (root == null) {
return ans;
}
while (!stack.isEmpty() || root != null) {
while (root != null) {
ans.add(root.val);
stack.push(root);
root = root.left;
}
root = stack.pop();
root = root.right;
}
return ans;
}
}