501二叉搜尋樹中的眾數

2021-10-03 14:04:52 字數 1062 閱讀 6326

給定乙個有相同值的二叉搜尋樹(bst),找出 bst 中的所有眾數(出現頻率最高的元素)。

假定 bst 有如下定義:

例如:

給定 bst [1,null,2,2],返回[2].

bst中序遍歷是公升序序列,逐個比對當前結點(root)值與前驅結點(pre)值。更新當前節點值出現次數(curtimes)及最大出現次數(maxtimes)。

若curtimes=maxtimes,將root.val新增到list中;若curtimes>maxtimes,清空list,再新增,並更新maxtimes為curtimes。

public

int[

]findmode

(treenode root)

list

arraylist =

newarraylist

<

>()

;process

(root, arraylist)

;int

ret =

newint

[arraylist.

size()

];for(

int i =

0; i < arraylist.

size()

; i++

)return ret;

}int curtimes=1;

int maxtimes=0;

treenode pre=null;

public

void

process

(treenode root, list

ret)

process

(root.left, ret);if

(pre != null)

if(maxtimes == curtimes)

else

if(curtimes > maxtimes)

pre = root;

process

(root.right, ret)

;}

501 二叉搜尋樹中的眾數

首先這題可以遍歷一遍二叉樹,用乙個map來存每個數字出現的次數之後取最大的就行,但這樣沒有利用到二叉搜尋樹的條件。所以我們利用二叉搜尋樹中序遍歷公升序 此題中為非降序 的性質,儲存中序字首節點,若當前節點與字首節點值相同,計數 1,若不同則重新從0開始計數。因為是非降序,所以一旦遍歷到了乙個更大的數...

501 二叉搜尋樹中的眾數

給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 例如 給定 bst 1,null,2,2 返回 2 高階 你可以不使用額外的空間嗎?假設由遞迴產生的隱式呼叫棧的開銷不被計算在內 因為二叉搜尋樹,中序遍歷的話得到的值是逐漸增加的,可以利用...

501 二叉搜尋樹中的眾數

題目描述 給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 結點左子樹中所含結點的值小於等於當前結點的值 結點右子樹中所含結點的值大於等於當前結點的值 左子樹和右子樹都是二叉搜尋樹 例如 給定 bst 1,null,2,2 返回 2 提示...