二叉樹的基本操作
刪除查詢並修改
計算結點數
計算樹高
二叉樹的演算法
二叉樹判別
判別滿二叉樹
判別二叉搜尋樹
適用於 完全二叉樹、滿二叉樹
// 二叉搜尋樹的插入---遞迴
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之間 包括端點 所有的樹。...