501 二叉搜尋樹中的眾數

2022-05-08 22:21:08 字數 1523 閱讀 5748

首先這題可以遍歷一遍二叉樹,用乙個map來存每個數字出現的次數之後取最大的就行,但這樣沒有利用到二叉搜尋樹的條件。所以我們利用二叉搜尋樹中序遍歷公升序(此題中為非降序)的性質,儲存中序字首節點,若當前節點與字首節點值相同,計數+1,若不同則重新從0開始計數。因為是非降序,所以一旦遍歷到了乙個更大的數字,之後的數字都只會相同或更大。額外維持乙個全域性變數maxsize記錄目前為止的出現最多數字的出現次數,視情況更新maxsize和結果陣列。

迭代版:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

vector<

int> res;

stack

> sta;

treenode* cur=root,

*pre_cur=0;

int cur_size=

0,max_size=0;

while

(cur or

!sta.

empty()

)else

else

if(cur_size>max_size)

else

if(cur_size==max_size)

pre_cur=cur;

cur=cur-

>right;}}

return res;}}

;

遞迴版
/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

int maxsize=

0,cursize=0;

vector<

int> res;

treenode* pre_root=0;

helper

(root,res,maxsize,cursize,pre_root)

;return res;

}void

helper

(treenode* root,vector<

int>

& res,

int& maxsize,

int& cursize,treenode*

& pre_root)

if(pre_root and pre_root-

>val==root-

>val)

else

if(cursize>maxsize)

else

if(cursize==maxsize)

pre_root=root;

if(root-

>right)}}

;

501 二叉搜尋樹中的眾數

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

501二叉搜尋樹中的眾數

給定乙個有相同值的二叉搜尋樹 bst 找出 bst 中的所有眾數 出現頻率最高的元素 假定 bst 有如下定義 例如 給定 bst 1,null,2,2 返回 2 bst中序遍歷是公升序序列,逐個比對當前結點 root 值與前驅結點 pre 值。更新當前節點值出現次數 curtimes 及最大出現次...

501 二叉搜尋樹中的眾數

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