給定乙個有相同值的二叉搜尋樹(bst),找出 bst 中的所有眾數(出現頻率最高的元素)。
假定 bst 有如下定義:
結點左子樹中所含結點的值小於等於當前結點的值
結點右子樹中所含結點的值大於等於當前結點的值
左子樹和右子樹都是二叉搜尋樹
例如:
給定 bst [1,null,2,2],1\
2/
2返回[2].
高階:你可以不使用額外的空間嗎?(假設由遞迴產生的隱式呼叫棧的開銷不被計算在內)
思路:由於二叉樹是有序的因此可以使用二叉樹的中序遍歷,使用乙個pre指標儲存當前節點的前乙個節點,利用變數count進行計數,計數值如果等於最大的頻率則將當前元素新增入列表當中,如果當前計數值大於最大的頻率值則更新最大頻率值,並且需要將列表清空,因為此時列表中的元素已經不再是眾數了。
class
solution
return ans;
}private
void
searchbst
(treenode cur)
else
if(pre.val == cur.val)
else
if(pre.val != cur.val)
pre = cur;
if(count == maxcount)
if(count > maxcount)
searchbst
(cur.right);}
}
使用棧模擬遞迴,單層處理邏輯與遞迴中相同,因此不需要改變
class
solution
else
else
if(pre.val == cur.val)
else
if(pre.val != cur.val)
if(count == maxcount)
if(count > maxcount)
pre = cur;
cur = cur.right;}}
int[
] ans =
newint
[list.
size()
];for(
int i =
0; i < ans.length; i++
)return ans;
}}
leetcode 501 二叉搜尋樹中的眾數
給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 結點左子樹中所含結點的值小於等於當前結點的值 結點右子樹中所含結點的值大於等於當前結點的值 左子樹和右子樹都是二叉搜尋樹 例如 給定 bst 1,null,2,2 返回 2 高階 你可以不...
Leetcode 501 二叉搜尋樹中的眾數
給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 例如 給定 bst 1,null,2,2 1 2 2返回 2 提示 如果眾數超過1個,不需考慮輸出順序 高階 你可以不使用額外的空間嗎?假設由遞迴產生的隱式呼叫棧的開銷不被計算在內 使用額...
LeetCode 501 二叉搜尋樹中的眾數
給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 結點左子樹中所含結點的值小於等於當前結點的值 結點右子樹中所含結點的值大於等於當前結點的值 左子樹和右子樹都是二叉搜尋樹 例如 給定 bst 1,null,2,2 1 2 2返回 2 高階...