您的位置:首页 > 其它

501. Find Mode in Binary Search Tree

2017-02-09 14:45 363 查看
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
/
2


return 
[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),不少sulotion采用hashmap或者list,如果遇到1,2,3,4...n-1,n,n,n的情况,空间复杂度会变成O(n)。所以应该先得到共有几个modes,再申请空间。代码如下:

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int max = 0;
private int currval = 0;
private int currcount = 0;
private int currmodes = 0;
private int[] modes;

public int[] findMode(TreeNode root) {
helper(root);
modes = new int[currmodes];
currcount = 0;
currmodes = 0;
helper(root);
return modes;
}

public void helper(TreeNode root) {
if (root == null) {
return;
}
helper(root.left);
if (root.val != currval) {
currval = root.val;
currcount = 1;
} else {
currcount ++;
}
if (currcount > max) {
max = currcount;
currmodes = 1;
}else if (currcount == max) {
if (modes != null) {
modes[currmodes] = root.val;
}
currmodes ++;
}
helper(root.right);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: