当前位置:网站首页>Leetcode skimming: binary tree 23 (mode in binary search tree)
Leetcode skimming: binary tree 23 (mode in binary search tree)
2022-07-07 12:48:00 【Taotao can't learn English】
501. The mode in the binary search tree
Given a binary search tree with the same value (BST), find BST All the modes in ( The most frequent element ).
Assume BST It has the following definition :
- The value of the node contained in the left subtree of a node is less than or equal to the value of the current node
- The value of the node contained in the right subtree of a node is greater than or equal to the value of the current node
- Both the left and right subtrees are binary search trees
for example :
Given BST [1,null,2,2],
return [2].
Tips : If the mode exceeds 1 individual , There is no need to consider the output sequence
Advanced : Can you not use extra space ?( Suppose the overhead of implicit call stack generated by recursion is not counted )
Two ways of thinking :
1: General writing method , Hashtable , Traversing the tree , Save the result set to hashmap, Traversal frequency value Get the maximum , Iterate again to get the result set , Process into an array .
HashMap<Integer, Integer> result = new HashMap<Integer, Integer>();
public int[] findMode(TreeNode root) {
// This problem can be done with a hash table
traversal(root);
Set<Integer> keys = result.keySet();
int max = -1;
for (Integer key : keys) {
if (result.get(key) > max) {
max = result.get(key);
}
}
Set<Integer> resultSet = new HashSet<Integer>();
for (Integer key : keys) {
if (result.get(key) == max) {
resultSet.add(key);
}
}
int[] resultArr = new int[resultSet.size()];
int index = 0;
for (Integer key : resultSet) {
resultArr[index] = key;
index++;
}
return resultArr;
}
public void traversal(TreeNode root) {
if (root == null) {
return;
}
traversal(root.left);
if (result.containsKey(root.val)) {
result.put(root.val, result.get(root.val) + 1);
} else {
result.put(root.val, 1);
}
traversal(root.right);
}
2. Binary search tree writing : Because it's a binary search tree , The decreasing , So the same number must be together , Count the number of occurrences of each number , Give a maximum number of occurrences , If the number of occurrences of the current number is less than the maximum number , Do not change , If equal , Then add the current number to the result set , If it is greater than the maximum number of occurrences , Then empty the result set , The current number is added to the result set .
List<Integer> list = new ArrayList<>();
TreeNode parent;
int maxTimes = 0;
int curTimes = 0;
public void inorderTraversal(TreeNode root) {
if (root == null) {
return;
}
inorderTraversal(root.left);
if (root.val == parent.val) {
curTimes++;
// If the number of occurrences of the current element is greater than the maximum number , Then a new mode appears , The original is not the mode
if (curTimes > maxTimes) {
maxTimes = curTimes;
list.clear();
list.add(root.val);
} else if (curTimes == maxTimes) {
// If the number of occurrences of the current element is equal to the maximum number , Then a new mode appears
list.add(root.val);
}
} else {
curTimes = 1;
if (curTimes > maxTimes) {
maxTimes = curTimes;
list.clear();
list.add(root.val);
} else if (curTimes == maxTimes) {
// If the number of occurrences of the current element is equal to the maximum number , Then a new mode appears
list.add(root.val);
}
parent = root;
}
inorderTraversal(root.right);
}
public int[] findMode(TreeNode root) {
parent = root;
inorderTraversal(root);
int index = 0;
int[] resultArr = new int[list.size()];
for (Integer result : list) {
resultArr[index] = result;
index++;
}
return resultArr;
}
边栏推荐
猜你喜欢
SQL lab 11~20 summary (subsequent continuous update) contains the solution that Firefox can't catch local packages after 18 levels
SQL Lab (32~35) contains the principle understanding and precautions of wide byte injection (continuously updated later)
leetcode刷题:二叉树21(验证二叉搜索树)
Vxlan static centralized gateway
Connect to blog method, overload, recursion
Four functions of opencv
Polymorphism, final, etc
Preorder, inorder and postorder traversal of binary tree
2022 examination questions and online simulation examination for safety production management personnel of hazardous chemical production units
The left-hand side of an assignment expression may not be an optional property access. ts(2779)
随机推荐
什么是ESP/MSR 分区,如何建立ESP/MSR 分区
The left-hand side of an assignment expression may not be an optional property access.ts(2779)
Charles: four ways to modify the input parameters or return results of the interface
leetcode刷题:二叉树25(二叉搜索树的最近公共祖先)
[learn micro services from 0] [02] move from single application to service
【二叉树】删点成林
leetcode刷题:二叉树23(二叉搜索树中的众数)
SQL injection -- Audit of PHP source code (take SQL lab 1~15 as an example) (super detailed)
Attack and defense world ----- summary of web knowledge points
Realize all, race, allsettled and any of the simple version of promise by yourself
【PyTorch实战】图像描述——让神经网络看图讲故事
How to use PS link layer and shortcut keys, and how to do PS layer link
ACL 2022 | small sample ner of sequence annotation: dual tower Bert model integrating tag semantics
【从 0 开始学微服务】【03】初探微服务架构
图形对象的创建与赋值
解密GD32 MCU产品家族,开发板该怎么选?
用mysql查询某字段是否有索引
sql-lab (54-65)
聊聊Redis缓存4种集群方案、及优缺点对比
【PyTorch实战】用PyTorch实现基于神经网络的图像风格迁移