A. 二叉樹是什麼意思
二叉樹是一類非常重要的樹形結構,它可以遞歸地定義如下:二叉樹T是有限個結點的集合,它或者是空集,或者由一個根結點u以及分別稱為左子樹和右子樹的兩棵互不相交的二叉樹u(1)和u(2)組成。若用n,n1和n2分別表示T,u(1)和u(2)的結點數,則有n=1+n1+n2 。u(1)和u(2)有時分別稱為T的第一和第二子樹。
B. 二叉樹基本演算法
#include <iostream.h>
typedef struct BiTNode
{
char data;
int bit;
struct BiTNode *lchild,*rchild,*parent;
}BiTNode;
void InitBT(BiTNode *&t)//1、初始化,不帶頭結點
{
t=NULL;
}
/*void InitBT(BiTNode *t)//初始化,帶頭結點
{
t=new BiTNode;
t->lchild=t->rchild=t->parent=NULL;
}*/
int EmptyBT(BiTNode *t)//判斷隊空
{
if(t==0)
return 1;
else
return 0;
}
BiTNode *creatBT(BiTNode *t,int b)//2、創建二叉樹
{
BiTNode *p;
char ch;
cin>>ch;
if(ch=='#')return 0;
else
{
p=new BiTNode;
p->data=ch;
p->parent=t;
p->bit=b;
t=p;
t->lchild=creatBT(t,0);
t->rchild=creatBT(t,1);
}
return t;
}
void preorder(BiTNode *t)//3、先序遍歷
{
if(!EmptyBT(t))
{
cout<<t->data;
preorder(t->lchild);
preorder(t->rchild);
}
}
void inorder(BiTNode *t)//中序遍歷
{
if(!EmptyBT(t))
{
inorder(t->lchild);
cout<<t->data;
inorder(t->rchild);
}
}
void postorder(BiTNode *t)//後序遍歷
{
if(!EmptyBT(t))
{
postorder(t->lchild);
postorder(t->rchild);
cout<<t->data;
}
}
void coutBT(BiTNode *t,int &m,int &n,int &i)//4、計算二叉樹中葉子結點、度為2的結點和度為1的結點的個數
{
if(!EmptyBT(t))
{
if((t->lchild==0) && (t->rchild==0))
m++;//葉子結點
else if((t->lchild!=0) && (t->rchild!=0))
i++;//度為2的結點
else
n++;//度為1的結點
coutBT(t->lchild,m,n,i);
coutBT(t->rchild,m,n,i);
}
}
void coutNode(BiTNode *t,int &k)//5、求二叉樹中結點個數
{
if(!EmptyBT(t))
{
k++;
coutNode(t->lchild,k);
coutNode(t->rchild,k);
}
}
int BTdepth(BiTNode *t)//6、求二叉樹的深度
{
int i,j;
if(EmptyBT(t))
return 0;
else
{
i=BTdepth(t->lchild);
j=BTdepth(t->rchild);
return (i>j?i:j)+1;
}
}
int Xdepth(BiTNode *t,char x)//7、查找x的層數
{
int num1,num2,n;
if(t==NULL)
return 0;
else{
if(t->data==x)
return 1;
num1=Xdepth(t->lchild,x);
num2=Xdepth(t->rchild,x);
n=num1+num2;
if(num1!=0||num2!=0)
n++;
return n;
}
}
static int flag;
void SearchChild(BiTNode *t,int k)//8、查找第k個結點的左右孩子
{
if(!EmptyBT(t))
{
if(k==0)
{
cout<<"位置不能為0!"<<endl;
return;
}
else
{
flag++;
if(flag==k)
{
if(t->lchild==0)
cout<<"無左孩子! ";
else
cout<<"左孩子為:"<<(t->lchild->data)<<" ";
if(t->rchild==0)
cout<<"無右孩子!"<<endl;
else
cout<<"右孩子為:"<<(t->rchild->data)<<endl;
}
else
{
SearchChild(t->lchild,k);
SearchChild(t->rchild,k);
}
}
}
}
int Xancestor(BiTNode *t,char x)//9、查找x結點祖先
{
int n,num1,num2;
if(t==NULL)
return 0;
else
{
if(t->data==x)
return 1;
num1=Xancestor(t->lchild,x);
num2=Xancestor(t->rchild,x);
n=num1+num2;
if(n!=0)
{
n++;
cout<<t->data<<" "<<endl;
}
}
}
void BTNodePath(BiTNode *t)//10、輸出所有葉子結點路徑
{
if(!EmptyBT(t))
{
if((t->lchild==0) && (t->rchild==0))
{
cout<<t->data<<"的路徑為:";
for(BiTNode *p=t;p!=0;p=p->parent)
cout<<p->data;
cout<<endl;
}
else
{
BTNodePath(t->lchild);
BTNodePath(t->rchild);
}
}
}
void BTNodebit(BiTNode *t)//11、輸出所有葉子結點編碼
{
if(!EmptyBT(t))
{
if((t->lchild==0) && (t->rchild==0))
{
cout<<t->data<<"的編碼為:";
for(BiTNode *p=t;p->parent!=0;p=p->parent)
cout<<p->bit;
cout<<endl;
}
else
{
BTNodebit(t->lchild);
BTNodebit(t->rchild);
}
}
}
void main()
{
BiTNode *t;
int m,n,i,d,q,k;
char x;
cout<<"1、初始化..."<<endl;
InitBT(t);
cout<<"2、創建二叉樹..."<<endl;
t=creatBT(t,0);
cout<<"3.1、先序遍歷..."<<endl;
preorder(t);
cout<<endl;
cout<<"3.2、中序遍歷..."<<endl;
inorder(t);
cout<<endl;
cout<<"3.3、後序遍歷..."<<endl;
postorder(t);
cout<<endl;
m=n=i=0;
cout<<"4、計算葉子結點,度為1的結點和度為2的結點的個數..."<<endl;
coutBT(t,m,n,i);
cout<<"葉子結點個數為:"<<m<<endl;
cout<<"度為1的結點個數為:"<<n<<endl;
cout<<"度為2的結點個數為:"<<i<<endl;
q=0;
cout<<"5、計算結點個數..."<<endl;
coutNode(t,q);
cout<<"結點個數為:"<<q<<endl;
d=0;
cout<<"6、計算深度..."<<endl;
d=BTdepth(t);
cout<<"深度為:"<<d<<endl;
cout<<"7、求x的層數..."<<endl;
cout<<"輸入x:";
cin>>x;
if(Xdepth(t,x)==0)
cout<<"x不存在!"<<endl;
else
cout<<Xdepth(t,x)<<endl;
cout<<"8、輸入要查找孩子的結點在先序遍歷中的位置k(不等於0):";
cin>>k;
SearchChild(t,k);
if(k>flag)
cout<<"位置超出長度!"<<endl;
cout<<"9、查詢結點的所有祖先,請輸入結點x:";
cin>>x;
int num;
num=Xancestor(t,x);
if(num==0)
cout<<"結點不存在!"<<endl;
if(num==1)
cout<<"根結點無祖先!"<<endl;
cout<<"10、輸出所有葉子結點路徑(葉→根):"<<endl;
BTNodePath(t);
cout<<"11、輸出所有葉子結點編碼(葉→根):"<<endl;
BTNodebit(t);
}
C. 二叉樹演算法是什麼
二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。
二叉樹的第i層至多有2^(i 1)個結點;深度為k的二叉樹至多有2^k 1個結點;對任何一棵二叉樹T,如果其終端結點數為n0,度為2的結點數為n2,則n0 = n2 + 1。二叉樹演算法常被用於實現二叉查找樹和二叉堆。
二叉樹是每個節點最多有兩個子樹的有序樹。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。
(3)二叉樹的定義演算法擴展閱讀:
二叉樹也是遞歸定義的,其結點有左右子樹之分,邏輯上二叉樹演算法有五種基本形態:
1、空二叉樹——(a)
2、只有一個根結點的二叉樹——(b);
3、右子樹為空的二叉樹——(c);
4、左子樹為空的二叉樹——(d);
5、完全二叉樹——(e)
注意:盡管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。
D. 二叉樹的定義
二叉樹在圖論中是這樣定義的:二叉樹是一個連通的無環圖,並且每一個頂點的度不大於3。有根二叉樹還要滿足根結點的度不大於2。有了根結點之後,每個頂點定義了唯一的父結點,和最多2個子結點。然而,沒有足夠的信息來區分左結點和右結點。如果不考慮連通性,允許圖中有多個連通分量,這樣的結構叫做森林。
E. 完全二叉樹的定義,性質和詳細的解釋
完全二叉樹定義完全二叉樹(Complete Binary Tree)若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。完全二叉樹是由滿二叉樹而引出來的。對於深度為K的,有N個結點的二叉樹,當且僅當其每一個結點都與深度為K的滿二叉樹中編號從1至n的結點一一對應時稱之為完全二叉樹。若一棵二叉樹至多隻有最下面的兩層上的結點的度數可以小於2,並且最下層上的結點都集中在該層最左邊的若干位置上,則此二叉樹成為完全二叉樹。完全二叉樹特點葉子結點只可能在最大的兩層上出現,對任意結點,若其右分支下的子孫最大層次為L,則其左分支下的子孫的最大層次必為L 或 L+1;出於簡便起見,完全二叉樹通常採用數組而不是鏈表存儲,其存儲結構如下:var tree:array[1..n]of longint;{n:integer;n>=1}對於tree[i],有如下特點:(1)若i為奇數且i>1,那麼tree的左兄弟為tree[i-1];(2)若i為偶數且i<n,那麼tree的右兄弟為tree[i+1];(3)若i>1,tree的雙親為tree[i div 2];(4)若2*i<=n,那麼tree的左孩子為tree[2*i];若2*i+1<=n,那麼tree的右孩子為tree[2*i+1];(5)若i>n div 2,那麼tree[i]為葉子結點(對應於(3));(6)若i<(n-1) div 2.那麼tree[i]必有兩個孩子(對應於(4))。(7)滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹完全二叉樹第i層至多有2^(i-1)個節點,共i層的完全二叉樹最多有2^i-1個節點。4演算法如果一棵具有n個結點的深度為k的二叉樹,它的每一個結點都與深度為k的滿二叉樹中編號為1~n的結點一一對應,這棵二叉樹稱為完全二叉樹。可以根據公式進行推導,假設n0是度為0的結點總數(即葉子結點數),n1是度為1的結點總數,n2是度為2的結點總數,由二叉樹的性質可知:n0=n2+1,則n= n0+n1+n2(其中n為完全二叉樹的結點總數),由上述公式把n2消去得:n= 2n0+n1-1,由於完全二叉樹中度為1的結點數只有兩種可能0或1,由此得到n0=(n+1)/2或n0=n/2。總結起來,就是 n0=[n/2],其中[]表示上取整。可根據完全二叉樹的結點總數計算出葉子結點數。
F. 二叉樹的基本概念
二叉樹是遞歸定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:
(1)空二叉樹——如圖(a);
(2)只有一個根結點的二叉樹——如圖(b);
(3)只有左子樹——如圖(c);
(4)只有右子樹——如圖(d);
(5)完全二叉樹——如圖(e)。
注意:盡管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。 (1)完全二叉樹——若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,並且葉子結點都是從左到右依次排布,這就是完全二叉樹。
(2)滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
(3)平衡二叉樹——平衡二叉樹又被稱為AVL樹(區別於AVL演算法),它是一棵二叉排序樹,且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。 樹的結點:包含一個數據元素及若干指向子樹的分支;
孩子結點:結點的子樹的根稱為該結點的孩子;
雙親結點:B 結點是A 結點的孩子,則A結點是B 結點的雙親;
兄弟結點:同一雙親的孩子結點; 堂兄結點:同一層上結點;
祖先結點: 從根到該結點的所經分支上的所有結點子孫結點:以某結點為根的子樹中任一結點都稱為該結點的子孫
結點層:根結點的層定義為1;根的孩子為第二層結點,依此類推;
樹的深度:樹中最大的結點層
結點的度:結點子樹的個數
樹的度: 樹中最大的結點度。
葉子結點:也叫終端結點,是度為 0 的結點;
分枝結點:度不為0的結點;
有序樹:子樹有序的樹,如:家族樹;
無序樹:不考慮子樹的順序; (1) 在非空二叉樹中,第i層的結點總數不超過 , i>=1;
(2) 深度為h的二叉樹最多有 個結點(h>=1),最少有h個結點;
(3) 對於任意一棵二叉樹,如果其葉結點數為N0,而度數為2的結點總數為N2,則N0=N2+1;
(4) 具有n個結點的完全二叉樹的深度為
(5)有N個結點的完全二叉樹各結點如果用順序方式存儲,則結點之間有如下關系:
若I為結點編號則 如果I>1,則其父結點的編號為I/2;
如果2*I<=N,則其左兒子(即左子樹的根結點)的編號為2*I;若2*I>N,則無左兒子;
如果2*I+1<=N,則其右兒子的結點編號為2*I+1;若2*I+1>N,則無右兒子。
(6)給定N個節點,能構成h(N)種不同的二叉樹。
h(N)為卡特蘭數的第N項。h(n)=C(2*n,n)/(n+1)。
(7)設有i個枝點,I為所有枝點的道路長度總和,J為葉的道路長度總和J=I+2i 二叉樹不是樹的一種特殊情形,盡管其與樹有許多相似之處,但樹和二叉樹有兩個主要差別:
1. 樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2;
2. 樹的結點無左、右之分,而二叉樹的結點有左、右之分。
G. 1. 二叉樹是樹嗎它的定義為什麼是遞歸的 2. 三種根序遍歷主要思路是什麼 3
二叉樹(Binary tree)是一種演算法結構,是樹形結構的一種。因為存儲結構及其演算法都較為簡單,好理解,所以應用比較廣泛。二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。
遞歸是演算法的一種,它是指一種通過重復將問題分解為同類的子問題而解決問題的方法。而二叉樹從演算法定義上看,或者是實際編程,3種遍歷方式,都符合遞歸演算法的特徵。
二叉樹遞歸遍歷分為先序遍歷、中序遍歷和後序遍歷。
先序遍歷為:根節點+左子樹+右子樹
中序遍歷為:左子樹+根節點+右子樹
後序遍歷為:左子樹+右子樹+根節點
(你只要記住根節點在哪裡就是什麼遍歷,且都是先左再右)
舉個例子,如二叉樹:
這棵樹的先序遍歷為:1 2 3 4 5
中序遍歷為:2 1 4 3 5
後序遍歷為:2 4 5 4 1
H. 什麼是二叉樹
二叉樹(Binary tree)是樹形結構的一個重要類型。是指樹中節點的度不大於2的有序樹,它是一種最簡單且最重要的樹。
二叉樹的遞歸定義為:二叉樹是一棵空樹,或者是一棵由一個根節點和兩棵互不相交的,分別稱作根的左子樹和右子樹組成的非空樹;左子樹和右子樹又同樣都是二叉樹。
1. 許多實際問題抽象出來的數據結構往往是二叉樹形式,即使是一般的樹也能簡單地轉換為二叉樹,而且二叉樹的存儲結構及其演算法都較為簡單,因此二叉樹顯得特別重要。
2. 二叉樹特點是每個結點最多隻能有兩棵子樹,且有左右之分。
3. 二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。
I. 二叉排序樹定義
二叉排序樹(Binary Sort Tree),又稱二叉查找樹(Binary Search Tree),亦稱二叉搜索樹。是數據結構中的一類。在一般情況下,查詢效率比鏈表結構要高。
定義一:
一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3)左、右子樹也分別為二叉排序樹;
(4)沒有鍵值相等的結點。
定義二:
一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;
(3)左、右子樹也分別為二叉排序樹。
定義三:
一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3)左、右子樹也分別為二叉排序樹;
【注】:以上的三種定義在不同的數據結構教材中均有不同的定義方式 但是都是正確的 在開發時需要根據不 同的需求進行進行選擇。
插入刪除:
與次優二叉樹相對,二叉排序樹是一種動態樹表。其特點是:樹的結構通常不是一次生成的,而是在查找過程中,當樹中不存在關鍵字等於給定值的結點時再進行插入。新插入的結點一定是一個新添加的葉子結點,並且是查找不成功時查找路徑上訪問的最後一個結點的左孩子或右孩子結點。
J. 什麼是二叉樹
二叉樹 (binary tree) 是另一種樹型結構,它的特點是每個結點至多隻有二棵子 樹 (即二叉樹中不存在度大於 2的結點 ),並且,二叉樹的子樹有左右之分,其次序不能任意顛倒 . 二叉樹是一種數據結構 :
Binary_tree=(D,R)
其中: D是具有相同特性的數據元素的集合 ;若 D等於空 ,則 R等於空稱為空的二叉樹 ;若 D等於空則 R是 D上某個二元關系 H的集合,即 R={H},且
(1) D 中存在唯一的稱為根的元素 r,它的關系 H下無前驅 ;
(2) 若 D-{r}不等於空,則 D-{r}={Dl,Dr},且 Dl交 Dr等於空 ;
(3) 若 Dl不等於空 ,則在 Dl中存在唯一的元素 xl,〈 r,xl〉屬於 H,且存在 Dl上的關系 Hl屬於 H; 若 Dr不等於空 ,則在 Dr中存在唯一的元素 xr,〈 r,xr〉 >屬於 H, 且存 Dr上的關 系 Hr屬於 H; H={r,xl,< r,xr> ,Hl, Hr};
(4) (Dl, Hl) 是一棵合本定義的二叉樹,稱為根 r的左子樹 ,(Dr,Hr)是一棵符合定義的二叉樹,稱為根的右子樹。
其中,圖 6.2 是各種形態的二叉樹 .
(1) 為空二叉樹 (2)只有一個根結點的二叉樹 (3)右子樹為空的二叉樹 (4)左子樹為空的二叉樹 (5)完全二叉樹
二叉樹的基本操作:
(1)INITIATE(BT ) 初始化操作。置 BT為空樹。
(2)ROOT(BT)\ROOT(x) 求根函數。求二叉樹 BT的根結點或求結點 x所在二叉樹的根結點。
若 BT是空樹或 x不在任何二叉樹上,則函數值為 「空 」。
(3)PARENT(BT,x) 求雙親函數。求二叉樹 BT中結點 x的雙親結點。若結點 x是二叉樹 BT 的根結點
或二叉樹 BT中無 x結點,則函數值為 「空 」。
(4)LCHILD(BT,x) 和 RCHILD(BT,x) 求孩子結點函數。分別求二叉樹 BT中結點 x的左孩 子和右孩子結點。
若結點 x為葉子結點或不在二叉樹 BT中,則函數值為 「空 」。
(5)LSIBLING(BT,x) 和 RSIBING(BT,x) 求兄弟函數。分別求二叉樹 BT中結點 x的左兄弟和右兄弟結點。
若結點 x是根結點或不在 BT中或是其雙親的左 /右子樹根 ,則函樹值 為 「空 」。
(6)CRT_BT(x,LBT,RBT) 建樹操作。生成一棵以結點 x為根,二叉樹 LBT和 RBT分別為左, 右子樹的二叉樹。
(7)INS_LCHILD(BT,y,x) 和 INS_RCHILD(BT,x) 插入子樹操作。將以結點 x為根且右子樹為空的二叉樹
分別置為二叉樹 BT中結點 y的左子樹和右子樹。若結點 y有左子樹 /右子樹,則插入後是結點 x的右子樹。
(8)DEL_LCHILD(BT,x) 和 DEL-RCHILD(BT,x) 刪除子樹操作。分別刪除二叉樹 BT中以結點 x為根的左子樹或右子樹。
若 x無左子樹或右子樹,則空操作。
(9)TRAVERSE(BT) 遍歷操作。按某個次序依此訪問二叉樹中各個結點,並使每個結點只被訪問一次。
(10)CLEAR(BT) 清除結構操作。將二叉樹 BT置為空樹。
5.2.2 二叉樹的存儲結構
一 、順序存儲結構
連續的存儲單元存儲二叉樹的數據元素。例如圖 6.4(b)的完全二叉樹 , 可以向量 (一維數組 ) bt(1:6)作它的存儲結構,將二叉樹中編號為 i的結點的數據元素存放在分量 bt[i]中 ,如圖 6.6(a) 所示。但這種順序存儲結構僅適合於完全二叉樹 ,而一般二叉樹也按這種形式來存儲 ,這將造成存 貯浪費。如和圖 6.4(c)的二叉樹相應的存儲結構圖 6.6(b)所示,圖中以 「0」表示不存在此結點 .
二、 鏈式存儲結構
由二叉樹的定義得知二叉樹的結點由一個數據元素和分別指向左右子樹的兩個分支構成 ,則表 示二叉樹的鏈表中的結點至少包含三個域 :數據域和左右指針域 ,如圖 (b)所示。有時 ,為了便於找 到結點的雙親 ,則還可在結點結構中增加一個指向其雙親受的指針域,如圖 6.7(c)所示。
5.3 遍歷二叉樹
遍歷二叉樹 (traversing binary tree)的問題, 即如何按某條搜索路徑巡訪樹中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。 其中常見的有三種情況:分別稱之為先 (根 )序遍歷,中 (根 )序遍歷和後 (根 )序遍歷。
5.3.1 前序遍歷
前序遍歷運算:即先訪問根結點,再前序遍歷左子樹,最後再前序遍歷右子樹。前序遍歷運算訪問二叉樹各結點是以根、左、右的順序進行訪問的。例如:
按前序遍歷此二叉樹的結果為: Hello!How are you?
proc preorder(bt:bitreprtr)
if (bt<>null)[
print(bt^);
preorder(bt^.lchild);
preorder(bt^.rchild);]
end;
5.3.2 中序遍歷
中序遍歷運算:即先中前序遍歷左子樹,然後再訪問根結點,最後再中序遍歷右子樹。中序遍歷運算訪問二叉樹各結點是以左、根、右的順序進行訪問的。例如:
按中序遍歷此二叉樹的結果為: a*b-c
proc inorder(bt:bitreprtr)
if (bt<>null)[
inorder(bt^.lchild);
print(bt^);
niorder(bt^.rchild);]
end;
5.3.3 後序遍歷
後序遍歷運算:即先後序遍歷左子樹,然後再後序遍歷右子樹,最後訪問根結點。後序遍歷運算訪問二叉樹各結點是以左、右、根的順序進行訪問的。例如:
按後序遍歷此二叉樹的結果為: Welecome to use it!
proc postorder(bt:bitreprtr)
if (bt<>null)[
postorder(bt^.lchild);
postorder(bt^.rchild);]
print(bt^);
end;
五、例:
1.用順序存儲方式建立一棵有31個結點的滿二叉樹,並對其進行先序遍歷。
2.用鏈表存儲方式建立一棵如圖三、4所示的二叉樹,並對其進行先序遍歷。
3.給出一組數據:R={10.18,3,8,12,2,7,3},試編程序,先構造一棵二叉樹,然後以中序遍歷訪問所得到的二叉樹,並輸出遍歷結果。
4.給出八枚金幣a,b,c,d,e,f,g,h,編程以稱最少的次數,判定它們蹭是否有假幣,如果有,請找出這枚假幣,並判定這枚假幣是重了還是輕了。
中山紀念中學三鑫雙語學校信息學競賽組編寫 2004.7.15