1、樹的定義
樹是⼀種⾮線性的資料結構,資料邏輯中之所以會引⼊「樹」這個東⻄,是借助 了⽣活中樹的「分⽀」的概念。邏輯資料中的樹可⽤於描述⼀種類似組織結構的 關係。 樹是⼀種資料結構,它是由n(n>=1)個有限結點組成⼀個具有層次關係的集合。 把它叫做「樹」是因為它看起來像⼀棵倒掛的樹,也就是說它是根朝上,⽽葉朝 下的。
⼆叉樹是每個結點最多有兩個⼦樹的樹結構。它有五種基本形態:⼆叉樹可以 是空集;根可以有空的左⼦樹或右⼦樹;或者左、右⼦樹皆為空。
2、樹的特點:
每個結點有零個或多個⼦結點;沒有⽗結點的結點稱為根結點;每⼀個⾮根結 點有且只有⼀個⽗結點;除了根結點外,每個⼦結點可以分為多個不相交的⼦樹;
結點: 樹中的元素 及其⼦樹
孩⼦/雙親: ⼀個結點的後繼結點叫該結點的孩⼦, 該結點叫 孩⼦的雙親 結點。
結點的度:該結點分⽀的數量 ,⽐如a節點的度為3,c節點的度為1
葉⼦: 度為0的結點,
結點的層次: 從根到該結點的層數(根的層次為1);
樹的⾼度(深度):樹中結點層次的最⼤值
根節點 :沒有⽗結點的結點稱為根結點
當n=0時稱為空樹。在任⼀⾮空樹中:①有且僅有⼀個稱為該樹之根的節點;② 除根結點之外的其餘節點可分為有限個互不相⼲的集合,且其中每⼀個集合本 身⼜是⼀棵樹,稱為根的⼦樹。
⼆叉排序樹
⼆叉排序樹(binary sort tree)⼜稱⼆叉查詢(搜尋)樹(binary search tree)。 其定義為:⼆叉排序樹或者是空樹,或者是滿⾜如下性質的⼆叉樹: ①若它的左⼦樹⾮空,則左⼦樹上所有結點的值均⼩於根結點的值; ②若它的右⼦樹⾮空,則右⼦樹上所有結點的值均⼤於根結點的值; ③左、右⼦樹本身⼜各是⼀棵⼆叉排序樹
建立二叉樹
第一次插入的數:5 4 2 8 9 1
第二次插入的數:3 6 7 2 1
⼆叉樹第i層上的結點數⽬最多為2i-
1(i>=1)
深度為k的⼆叉樹⾄多有2k-
1個結點(k>=
1)
1、bst_tree *bst_tree_insert(bst_tree *root,int value) //插入操作2、void bst_print(bst_tree *root)//中序遍歷
//二叉樹
#include
#include
struct bi_search_tree
;typedef
struct bi_search_tree bst_tree;
/*插入操作,value是待插入的值*/
bst_tree *
bst_tree_insert
(bst_tree *root,
int value)
while
(node!=
null
)else
if(node->key>=value)
}while
(node!=
null
)else
else}}
//建立新節點
bst_tree *child =
(bst_tree *
)malloc
(sizeof
(bst_tree));
//child存放跟節點以外的節點//child存放新建立節點
child->key = value;
child->left =
null
; child->right =
null;if
(value > parent->key)
else
return root;
}/*中序輸出bst樹*/
void
bst_print
(bst_tree *root)
bst_print
(root->left)
;printf
(" %d "
, root->key)
;bst_print
(root->right);}
intmain()
; bst_tree *root=
null
;for
(int i=
0;i<
6;i++
) root=
bst_tree_insert
(root,3)
; root=
bst_tree_insert
(root,6)
; root=
bst_tree_insert
(root,7)
; root=
bst_tree_insert
(root,2)
; root=
bst_tree_insert
(root,1)
;bst_print
(root)
;/*中序遍歷*/
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...