Leetcode-标签为Tree 501. Find Mode in Binary Search Tree
来源:互联网 发布:企业优化方案 编辑:程序博客网 时间:2024/06/05 17:13
原题
Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than or equal to the node's key.
The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
Both the left and right subtrees must also be binary search trees.
For example:
Given BST [1,null,2,2], 1 \ 2 / 2return [2].
Note: If a tree has more than one mode, you can return them in any
order.Follow up: Could you do that without using any extra space? (Assume
that the implicit stack space incurred due to recursion does not
count).
题目分析
求解二叉搜索树中出现次数最多的元素,答案的空间复杂度为 O(1)。二叉搜索树的中序遍历恰好为元素的从小到大排序,这样相等的元素一定是相邻的。了解了这个知识点,空间复杂度O(1)就可以做到了。
代码实现
public class Findmodes { private int currentVal; private int currentCount = 0; private int maxCount = 0; private int modeCount = 0; private int[] modeArray; public int[] FindMode(TreeNode root) { preorder(root); //第一遍中序遍历找出出现次数最多的元素数,可能有多个最大 modeArray = new int[modeCount]; modeCount = 0; currentCount = 0; preorder(root); return modeArray; } /// <summary> /// 这种方法只适应于二叉搜索树条件下,查找元素出现的最多次数 /// </summary> /// <param name="val"></param> private void getModeValue(int val) { if (val != currentVal) { currentVal = val; currentCount = 0; } currentCount++; if (currentCount > maxCount) { maxCount = currentCount; modeCount = 1; } else if (currentCount == maxCount) { if (modeArray != null) //第二遍遍历后,对出现次数最多的元素 modeArray[modeCount] = currentVal; //依次赋值给modeArray modeCount++; } } /// <summary> /// 二叉搜索树,采取中序遍历对值处理 /// </summary> /// <param name="root"></param> private void preorder(TreeNode root) { if (root == null) return; preorder(root.left); getModeValue(root.val); preorder(root.right); } }
- Leetcode-标签为Tree 501. Find Mode in Binary Search Tree
- [Leetcode] Binary tree -- 501. Find Mode in Binary Search Tree
- LeetCode 501. Find Mode in Binary Search Tree
- leetcode 501. Find Mode in Binary Search Tree
- LeetCode-501. Find Mode in Binary Search Tree
- Leetcode——501. Find Mode in Binary Search Tree
- LeetCode 501.Find Mode in Binary Search Tree
- LeetCode 501. Find Mode in Binary Search Tree
- [LeetCode] 501. Find Mode in Binary Search Tree 解题报告
- [LeetCode]501. Find Mode in Binary Search Tree
- [leetcode: Python]501. Find Mode in Binary Search Tree
- [leetcode]: 501. Find Mode in Binary Search Tree
- leetcode 501. Find Mode in Binary Search Tree
- [LeetCode] 501. Find Mode in Binary Search Tree
- [leetcode]501. Find Mode in Binary Search Tree
- LeetCode-501. Find Mode in Binary Search Tree(Java)
- leetcode 501. Find Mode in Binary Search Tree
- leetcode 501. Find Mode in Binary Search Tree
- 10分钟搭建属于自己的ngork服务器,实现内网穿透
- [踏石留印之爬虫] 各种爬虫收集
- java -- 数组(Arrary)
- Reverse Integer算法
- maven安装及本地私有仓库搭建
- Leetcode-标签为Tree 501. Find Mode in Binary Search Tree
- vue-2.x webpack 安装vue-router 配置路由
- Android手机同时使用Wi-Fi和数据流量
- 使用Setup Factory 给应用程序打包
- 股票交易 动态规划 分治算法
- MySQL order by实现原理分析和Filesort优化
- spring源码-3-bean实例化
- floyd算法--一个人的旅行
- PHP htmlspecialchars() 函数--防注入字符转义函数