2.1 二叉樹特性
與普通樹根本區別:
(1)每個元素恰好有兩棵子樹
(2)每個元素的子樹是有序的,左子樹和右子樹
(3)二叉樹可以為空
例:表示式樹
特性:
(1)有n各元素,必有n-1條邊
(2)有n個元素,高度最小log
2(n+
1)log_2(n+1)
log2(
n+1)
,最大n
(3)高度為h,最少h個元素,最多2h−
12^h-1
2h−1
個元素(4)完全二叉樹某元素編號為i,1≤i
≤n1\le i \le n
1≤i≤
n,有以下關係成立:
#ifndef binarytreenode_
#define binarytreenode_
using namespace std;
template
struct binarytreenode
binarytreenode
(const t& theelement)
:element
(theelement)
binarytreenode
(const t& theelement,
binarytreenode* theleftchild,
binarytreenode* therightchild)
:element
(theelement)};
#endif
2.3 二叉樹常用操作
以上操作可通過對二叉樹的遍歷實現。
2.4 二叉樹遍歷
常用的4中遍歷方法:
template
void
preorder
(binarytreenode
*t)}
template
void
inorder
(binarytreenode
*t)}
template
void
postorder
(binarytreenode
*t)}
前三種方法相同之處:左子樹先於右子樹遍歷區別在於:對每個節點訪問時間不同
***例:***對下圖三個數分別用上述三種遍歷方法進行遍歷
結果如下:
其中,遍歷方法visit(t)程式如下:
template
void
visit
(binarytreenode
*x)
template
void
levelorder
(binarytreenode
*t) catch (queueempty)
q.pop();
}}
3.1 抽象資料型別
3.2 類linkedbinarytree
宣告如下:
template
class linkedbinarytree : public binarytree
>
~linkedbinarytree()
; bool empty()
const
intsize()
const
e*rootelement()
const
;void
maketree
(const e& element,
linkedbinarytree
&, linkedbinarytree&)
; linkedbinarytree
&removeleftsubtree()
; linkedbinarytree
&removerightsubtree()
;void
preorder
(void
(*thevisit)
(binarytreenode*)
)void
inorder
(void
(*thevisit)
(binarytreenode*)
)void
postorder
(void
(*thevisit)
(binarytreenode*)
)void
levelorder
(void(*
)(binarytreenode*)
);void
preorderoutput()
void
inorderoutput()
void
postorderoutput()
void
levelorderoutput()
void
erase()
intheight()
const
protected:
binarytreenode
* root;
// pointer to root
int treesize;
// number of nodes in tree
static
void
(*visit)
(binarytreenode*)
;// visit function
static
int count;
// used to count nodes in a subtree
static
void
preorder
(binarytreenode
* t)
;static
void
inorder
(binarytreenode
* t)
;static
void
postorder
(binarytreenode
* t)
;static
void
countnodes
(binarytreenode
* t)
static
void
dispose
(binarytreenode
* t)
static
void
output
(binarytreenode
* t)
static
void
addtocount
(binarytreenode
* t)
static
intheight
(binarytreenode
* t);}
;
方法定義略。
設定訊號放大器
並查集
演算法與資料結構 二叉樹
二叉樹 binary tree 二分樹 二元樹 二叉樹的遞迴定義 或是空樹,或是一棵由乙個根結點和左右子樹組成的樹,且左右子樹也是二叉樹。分枝結點 除葉結點以外的結點。二叉樹的性質 最多 2 h 1 個結點 n2 n0 1 滿二叉樹 所有分枝結點都存在左右子樹,且葉結點都在同一層。完全二叉樹 除最後...
資料結構與演算法 二叉樹
1.普通二叉樹 treenode package math public class treenode public void setdata int data public treenode getlchild public void setlchild treenode lchild publi...
資料結構與演算法 二叉樹
二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 性質1 在二叉樹的第i層上至多有2 i 1 個結點 i 0 性質2 深度為k的二叉樹至多有2 k 1個結點 k 0 性質3 對於任意一棵二叉樹,如果其葉結點數為n0,而度...