一.樹的定義與性質
1.空樹:沒有結點的樹;
2.樹的層次:根結點為第一層,根節點子樹的根節點為第二層;
3.度:結點子樹的棵樹,葉結點度為0;
4.有 n 個結點的樹,邊數為 n - 1;
5.結點的深度:從根結點(深度為1)開始,自頂向下;
結點的高度:從葉結點(高度為1)開始,自底向上;
二.二叉樹的遞迴定義
1.第一種情況:二叉樹是空樹;第二種情況:二叉樹由根節點、左子樹、右子樹構成;
2.二叉樹與度為2的樹:二叉樹不能隨意交換左右兩棵子樹的位置,樹的結點的子樹是不區分左右順序的;
3.滿二叉樹:每一層的結點數都達到最大;
完全二叉樹:除了最下面一層,其餘層的結點數都達到了最大,最下面一層只從左到右連續存在若干結點,右邊的結點都不存在;
三.二叉樹的儲存結構與基本操作
1.二叉樹的儲存結構(利用鍊錶來定義):
struct node
;
新建結點的函式:
node*
newnode
(int v)
2.二叉樹結點的查詢和修改:
void
search
(node* root,
int x,
int newdata)
3.二叉樹結點的插入:
void
insert
(node*
&root,
int x)
if(x應該插在左子樹)
insert
(root-
>lchild, x)
;else
insert
(root-
>rchild, x)
;}
根節點指標 root 為什麼使用引用?
insert(root, x) 中的 root 是上一層裡的 root->lchild / root->rchild,如果不用引用,改不了上一層的 struct,也就不能把新結點接到二叉樹上;
什麼時候使用引用:新建結點時,如果只是修改或遍歷,則不需加引用;
4.二叉樹的建立:
node*
create
(int data,
int n)
5.完全二叉樹的儲存結構:
使用陣列(大小為結點上限個數-1),根結點為1號位,任意結點(編號x)的左結點編號為 2x,右結點為 2x+1;
9 1樹與二叉樹
樹根抽象為根結點,樹葉概括為葉子結點。二叉樹 根結點與左子樹右子樹 分為滿二叉樹與完全二叉樹 二叉樹的相關 include includestruct node node root null 建立新的結點 node newnode int v 查詢 修改操作 void search node roo...
樹與二叉樹筆記
樹與二叉樹 二叉樹的性質 性質1 二叉樹中的第i i 0 層的結點數最多為2 i 性質2 深度為h h 1 的二叉樹最多有2 h 1個結點 性質3 對於任何一顆二叉樹,若其葉結點的個數為n0,度為2的結點n2,則有n0 n2 1 性質4 二叉樹的儲存結構 順序儲存 適合滿二叉樹或完全二叉樹 鏈式儲存...
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...