二叉樹的眾數問題

2022-07-08 06:30:11 字數 2156 閱讀 2789

如果給定一棵二叉樹,要找到二叉樹中的所有眾數(出現頻率最高的元素)。

一、普通二叉樹的眾數

要統計出現的次數,一般使用到的是map中的unordered_map,因為不需要有序,也不需要有重複的元素,其key值一般是元素的值,value一般是元素出現的次數,這個只要遍歷一遍二叉樹就能得到unordered_map了;

關鍵是遍歷得到它之後怎樣做處理:

1 得到的map裡放的是key(元素)和value(元素出現的個數),是按照二叉樹遍歷的順序放進去的,如果不是二叉搜尋樹的中序遍歷,那就是無序的,要在這個無序的map中找到出現頻率最高的key(元素),也就是找到value值最大的所有元素,以下我總結幾種方法,其實懂的人可能覺得很簡單,因為我對於map的迭代操作不熟練,所以用來記錄一下,勿怪。

(1)我們新建立乙個vector>,用map初始化它,然後我們需要先遍歷一遍這個vector,找到value的最大值,再遍歷一遍,找到這個value對應的所有元素放進結果集中。

/*

* * definition for a binary tree node.

* struct treenode

* }; */

class

solution

public

: vector

findmode(treenode*root)

//以上得到了value的最大值

for (int i=0; i)

return

result;

}};

(2)直接用map迭代器進行迭代

/*

* * definition for a binary tree node.

* struct treenode

* }; */

class

solution

public

: vector

findmode(treenode*root)

//以上得到了value的最大值

for (it = map.begin(); it != map.end(); it++)

return

result;

}};

2 得到的map是key 和 value一一對應的,我們可以建立vector>來將map複製過來,然後對這個vector進行sort排序,按照value從大到小的順序排序,排序好之後,value最大也就是出現次數最多的元素肯定排在前面,遍歷一次,將他們加入結果集即可。

/*

* * definition for a binary tree node.

* struct treenode

* }; */

class

solution

bool

static cmp(const pair& a, const pair&b)

public

: vector

findmode(treenode*root)

return

result;

}};

二、求二叉搜尋樹中的所有眾數

二叉搜尋樹也是普通的二叉樹,當前可以按照普通二叉樹的思路和方法求解,但是二叉搜尋樹具有 中序遍歷 有序的特性,應用這個特性,能找到更高效的方法。

可以通過一次遍歷得到結果,需要pre指標來記錄前乙個節點,需要count來統計頻率,需要maxcount來表示最大頻率,還需要乙個結果集在存放結果。因為是全部遍歷,所以遞迴函式不需要返回值

/*

* * definition for a binary tree node.

* struct treenode

* }; */

class

solution

if (count > maxcount)

searchbst(root->right);//

右return

; }

public

: vector

findmode(treenode*root)

};

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

二叉樹問題 二叉樹層級列印

給定二叉樹的頭結點,按層級列印二叉樹節點值。從上到下按層遍歷,應該是先遍歷到的節點先輸出。因此用佇列作為輔助結構來解此題。層級遍歷中關鍵點要知道什麼時候換層。用兩個變數last 和nlast,分別指向當前層的最右邊和下一層的最右邊節點。當當前層的最右邊節點從佇列中輸出時,表示這一層遍歷完畢了,此時使...

二叉樹問題

mirror of search tree.cpp 定義控制台應用程式的入口點。二叉樹的映象實現,二叉樹的廣度優先遍歷 佇列 include stdafx.h include iostream include queue using namespace std struct bstnode temp...