求出棧序列,二叉樹,二叉搜尋樹的計數問題

2021-06-20 18:33:50 字數 899 閱讀 6964

求出棧序列,二叉樹,二叉搜尋樹的計數問題

#include using namespace std;

const long long inf=1000000007;

long long a[1001];

void init(int n)

{ for(int i=0;i>n)

{if((n&1)==0)

cout二叉樹的計數所有遞推關係:具有n個結點的二叉樹可以視為由乙個根結點,一棵具有i個結點的左子樹和一棵具有n-i-1的右子樹構成

於是當n=0時 b=1

當n=1時顯然b=1

類似問題:

一棵樹可以轉換成唯一的一棵沒有右子樹的二叉樹,反過來亦成立

因此,n 個結點的樹的數目t(n)和n-1個結點的二叉樹數目相同

棧的計數與二叉樹計數性質一樣,原因是二叉樹中序遍歷時需要棧,每乙個中序形態對應了棧的進棧出棧序列,而前序與中序可以構成唯一的二叉樹,所以給定n個資料的出棧序列計數與二叉樹的計數是一致的

二叉搜尋樹的計數遞推有兩種方式理解:

2假設搜尋樹的值為1,2,3....n,設根結點值為i+1,則左子樹為1,2,3....i,右子樹為i+2,i+3.....n,

於是當n=0時 b=1

當n=1時顯然b=1

最後該遞推式都可以根據數學中的生成函式得到公式

遞推關係的解為:

h(n)=c(2n,n)/(n+1) (n=0,1,2,...)

遞推關係的另類解為:

h(n)=c(2n,n)-c(2n,n-1)(n=1,2,...)

即為卡特蘭數

二叉樹 還原二叉樹 二叉搜尋樹

先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...

排序二叉樹or搜尋二叉樹or查詢二叉樹

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...