**
左子樹中節點的數目+右子樹中節點的數目+1
template
<
class
t>
int bitree
::count
(binode
* root)
(一)基本思想:
1、增加乙個資料成員,leafcount, 初值為0
2、對樹進行遍歷。 如果乙個節點是葉子,則將leafcount+1;
3、可以在前序、中序或後序的遍歷過程中進行計算。
(二)演算法分析
從根節點出發,判斷當前節點是否是葉子節點,如果是,則葉子數+1,否則,在左子樹中遍歷,並統計葉子節點的數目,在右子樹中進行遍歷,並統計葉子節點的數目。
template
<
typename t>
void bitree
::countleaf
(bitreenode
* root)
}return
;}
左子樹中葉子節點的數目+右子樹中葉子節點的數目
template
<
class
t>
int bitree
::leafcount
(binode
* root)
(一)高度的定義
max(左子樹高度,右子樹高度)+1
(二)演算法分析
從根節點出發開始計算,如果root==null, 高度為0;否則,分別計算左子樹的高度;右子樹的高度;返回max(左子樹高度,右子樹高度)+1
(三)遞迴的定義
template
<
typename t>
int bitree
::cal_height
(bitreenode
* root)
eg:(a+(b*(c-d)))-(e/f)
(一)基本思想
中序遍歷。
中序遍歷左子樹前,輸出左括號
中序遍歷右子樹後,輸出右括號
如果遍歷葉子結點的左右子樹,不輸出括號
如果遍歷根節點的左右子樹,不輸出括號(否則,會得到形如(a+b)的表示式)
void bitree
::in_expression
(binode
* root)
}
template
<
class
t>
void bitree
::left_rotate
(binode
* root,
int level)
}
(一)寬度定義
所謂寬度是指在二叉樹的各層上,具有結點數最多的那一層上的結點總數
(二)基本思想
利用層次遍歷實現
struct q_element
;int bitree::
width()
; q_element s,child;
binode *root;
root=
this
->root;
if(root==
null
)return0;
s.root=root; s.level=
1; q.
push
(s);
while
(!q.
empty()
)if(s.root-
>rchild)
q.pop();
}int max=
0,i=1;
while
(num[i]
>0)
return max;
}
(一)基本思想:
基於層次遍歷。
定義bool變數is_leaf,初值為false
如果is_leaf的值為true, 表示遍歷的過程中遇到了葉子結點。
一旦在葉子結點之後再出現度為1、2的結點,則該樹不是完全二叉樹。
(二)演算法分析
在層次遍歷中,如果遇到乙個節點
只有右兒子,沒有左兒子,
false;
只有左,沒有右
if (is_leaftrue) return false;
else is_leaf=true;
兩個兒子均為空
is_leaf=true
兩個兒子均不空
if (is_leaftrue) return false;
將存在的兒子入隊
能遍歷完所有節點,即為完全二叉樹
template
<
class
t>
bool bitree
::is_wanquan
(binode
*root)
return
true
;}
資料結構筆記 樹 二叉樹 滿二叉樹
二叉樹滿二叉樹 樹是n n 0 個結點的有限集。結點為零的樹為空樹。任意一棵非空樹中 1.有且有乙個特定的稱為根的結點 2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每乙個集合又是一棵樹,並稱為根的子樹。1.結點擁有的子樹數稱為結點的度 2.度為0的結點稱為葉結點或分支結點,除根...
關於資料結構中二叉樹
include include include typedef char element typedef struct bitnode bitnode,bitree struct queuenode typedef struct queuenode queuenode typedef queueno...
資料結構 二叉樹 反轉二叉樹
include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...