leetCode 501 二叉搜尋樹中的眾數

2021-10-10 06:01:10 字數 1216 閱讀 3586

給定乙個有相同值的二叉搜尋樹(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 高階...