演算法筆記 樹

2021-10-24 06:16:34 字數 2015 閱讀 1071

二叉樹的基本操作

刪除查詢並修改

計算結點數

計算樹高

二叉樹的演算法

二叉樹判別

判別滿二叉樹

判別二叉搜尋樹

適用於 完全二叉樹、滿二叉樹

// 二叉搜尋樹的插入---遞迴

void

insert_dg

(node *

&p,int x)

if(p-

>d==x)

return

;//如果已經存在,就不插入

else

if(p-

>d>x)

insert_dg

(p->l,x)

;else

insert_dg

(p->r,x)

;}

void

insert

(int x)

node* p=root;

while

(p!=

null

) p = p-

>l;

}else

p = p-

>r;}}

}

// 二叉樹查詢修改

bool

search_update

(node * root,

int x,

int newx)

bool f =

search_update

(root-

>l,x,newx);if

(f)return

true

;return

search_update

(root-

>r,x,newx)

;}

// c為結點總數 方法一

void

count

(node * nd,

int&c)

// 返回值為結點總數 方法二

intcount

(node *nd)

// 返回值為樹高

inthigh

(node * nd)

void

pre_order

(node *p)

void

in_order

(node *p)

void

post_order

(node *p)

void

level_order()

}

思路1 入佇列 & 最後乙個非葉結點後的結點必無孩子

bfs 將每乙個節點都加入到佇列,同時執行下面的判斷

bool

iscbt()

return

true

;}

思路2 入佇列 & 出現空結點後不能再有非空
// 判別是否完全二叉樹---鍊錶儲存的樹 

bool

iscbt()

while

(!q.

empty()

)return

true

;}

思路1 完全二叉樹 & 樹高h+總結點數==2樹高-1
// 判別是否滿二叉樹

bool

isfbt()

思路2 層序遍歷 & 每層結點數==2當前層高度-1思路1 中序遍歷為公升序序列

思路2 中序遍歷 & 前乙個數必小於後乙個數

// 判別是否二叉搜尋樹

bool

isbst

(node * nd,

int&pre)

演算法筆記 樹

樹的定義和性質 現實中的樹是由樹根,莖幹,樹葉組成的,樹的營養時由樹根出發,通過莖幹與樹枝來不斷傳遞,最終到達樹葉的。在資料結構中,樹則是用來概括這種傳遞關係的一種資料結構。為了簡化,資料結構中把樹枝分叉處,樹葉,樹根抽象為結點,其中樹根抽象為根結點,且對一棵樹來說最多存在乙個根結點 把樹葉概括為葉...

《演算法導論》筆記 B樹

演算法 cc c 資料結構 b樹是平衡樹的一種,主要用於操作儲存在磁碟等二級儲存裝置上的大量資料。相比起記憶體 主存 來說,磁碟操作的速度非常慢 慢幾個數量級 所以涉及到儲存在磁碟的資料的時候,儘量減少磁碟的讀取和寫入操作對於提高操作速度是非常重要的。b樹就是針對這個特點進行設計以滿足相應要求的。b...

演算法筆記 剩下的樹

題目描述 有乙個長度為整數l 1 l 10000 的馬路,可以想象成數軸上長度為l的乙個線段,起點是座標原點,在每個整數座標點有一棵樹,即在0,1,2,l共l 1個位置上有l 1棵樹。現在要移走一些樹,移走的樹的區間用一對數字表示,如 100 200表示移走從100到200之間 包括端點 所有的樹。...