將書中所有的加粗的基本概念摘錄出來了,方便自查。子樹根
度樹的度
葉子孩子
雙親兄弟
祖先子孫
層次堂兄弟
深度/高度:從1開始,從上往下。
有序樹/無序樹森林
二叉樹的左右結點是不能調換的,換了就不是同一棵樹了。
二叉樹可以視為一種公比為2的等比數列
將《資料結構》中的5個基本性質都簡單證明了一遍。
滿二叉樹:高度是h,同時有2^h - 1個結點。(判斷:全是結點)
完全二叉樹:按照滿二叉樹進行數,序號和位置可以按照滿二叉樹位置對上。
遞迴版本:什麼序,根在哪。
非遞迴版本:
//非遞迴先序遍歷: 根左右
void
preorder
(bitree t)
if(s.
empty()
==false)}
}
中序遍歷:
void
inorder
(bitree t)
//出來的時候一定是沒有左結點的//
p = s.
top();
//此時的棧頂必定是這個左結點的中結點//
s.pop()
;printf
("%c "
, p-
>data)
; p = p-
>rchild;
}
後序遍歷:
void
postorder
(bitree t)
else}}
}
層序遍歷:
void
levelorder
(bitree t)
if(p-
>rchild !=
null)}
}
線索二叉樹:ltag
lchild
data
rchild
rtag
雙親表示法
#include
#define maxsize 100
using
namespace std;
typedef
char elemtype;
//樹的結點定義
typedef
struct tnodetnode;
//樹的定義//
typedef
struct
tree;
孩子表示法
#include
#define maxsize 100
using
namespace std;
typedef
char elemtype;
//孩子結點的定義
typedef
struct cnodecnode ,
*child;
//樹的所有資料表
typedef
struct
tnode;
//樹的定義//
typedef
struct
tree;
孩子兄弟表示法
#include
#define maxsize 100
using
namespace std;
typedef
char elemtype;
//孩子結點的定義
typedef
struct csnodecsnode;
左孩右兄樹森林
二叉樹先根遍歷
先序遍歷
先序遍歷
後根遍歷
中序遍歷
中序遍歷
並查集用於kruskal演算法,借鑑了樹的思想,方便合併同類。
//初始化
void
init()
//並void
union
(int a ,
int b)
}//查
intfindfather
(int father,
int x)
return x;
}
左 < 根 < 右,中序遍歷可得乙個遞增序列。
查詢操作
bstnode *
bst_search
(bitree t , elemtype key , bstnode *
&p)return t;
}
插入
int
bst_insert
(bitree &t , keytype k)
else
if(k == t-
>key)
//如果這個數存在
return0;
else
if(k < t-
>key)
//比這個小左拐
return
bst_insert
(t->lchild , k)
;else
//比這個大右拐
return
bst_insert
(t->rchild , k)
;}
構造
void
creat_bst
(bitree &t , keytype str,
int n)
}
刪除此處不涉及**,只涉及思想。
左空補右,右空補左,左右不空,中序右補。(交換後單樹調整。)
查詢效率:可能出現單邊樹;靜態查詢錶用順序表,動態查詢表,二叉排序樹。asl會求,詳見asl樹問題。
平衡因子:|左樹高 - 右樹高|不超過1。
插入:ll,rr,lr,rl。**不平衡,**就調整,從下往上。(細節看書,不做深究。)
查詢:bst相同。
wpl最小,即為哈夫曼樹。
wpl的求法:樹的wpl = ∑(葉結點權值 * 路徑數)。
構造:池子拿出最小兩個點結合(權值相加),結合的結點放回池子裡再次操作,得一棵樹。權值越小,離根越遠;n個結點最後樹有2n - 1個結點,(結合一次多乙個結點)
編碼:左0右1。可得最短二進位制字首編碼,必是最優,但是不一定唯一。
資料結構第六章樹
第六章 樹 1.樹是n個結點的有限集。n 0時稱為空樹。在任意乙個非空樹中 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,其餘節點可分為m個互不相交的有限集,其中每乙個集合又是一棵樹,並成為根的子樹。2.結點分類 結點擁有的子樹稱為結點的度。度為0的結點稱為葉結點或終端節點 度不為0的結點稱為...
資料結構筆記 第六章
一.圖的儲存結構及實現 圖可以使用兩種儲存結構,分別是鄰接矩陣和鄰接表。鄰接矩陣以矩陣的形式儲存圖所有頂點間的關係。鄰接矩陣具有以下特點 1,鄰接矩陣是正矩陣,即橫縱維數相等。2,矩陣的每一行或一列代表乙個頂點,行與列的交點對應這兩個頂點的邊。3,矩陣的點代表邊的屬性,1代表有邊,0代表無邊,所以矩...
第六章 資料結構
存放同一種資料型別的多個元素的容器,通過索引 記憶體偏移量 進行元素的訪問,陣列的大小一旦確定就不能改變。陣列其實也是線性表結構,在記憶體中陣列的元素是緊挨著連續儲存的。特點 查詢快 增刪慢 舉例 定義乙個陣列 int arr new int 想在2的後面插入乙個新的元素11,這時候就需要定義乙個新...