二叉樹的基本運算是基於鏈式儲存結構的:
1. 建立二叉樹createbtnode(*b,*str):根據二叉樹括號表示法的字串*str生成對應的鏈式儲存結構。
2. 查詢節點findnode(*b,x):在二叉樹b中尋找data域值為x的節點,並返回指向該節點的指標
3. 找孩子節點lchildnode(p)和rchild-node(p):分別求二叉樹中節點*p的左孩子節點和右孩子節點。
4.求高度btnodedepth(*b):求二叉樹b的高度。若二叉樹為空,則其高度為0;否則,其高度等於左子樹與右子樹中的最大高度加l
5. 輸出二叉樹dispbtnode(*b):以括號表示法輸出一棵二叉樹
例:str —— a ( b ( d ( , g ) ) , c ( e , f ) )
掃瞄採用括號表示法表示二叉樹的字串,讀到的符號為ch
使用乙個棧st儲存雙親節點,k指定其後處理的節點是雙親節點(儲存在棧中)的左孩子節點(k=1)還是右孩子節點(k=2)。
分以下幾種情況:
1.若ch=』(『:則將前面剛建立的節點作為雙親節點進棧,並置k=1,表示其後建立的節點將作為這個節點的左孩子節點
2.若ch=『,』:表示其後建立的節點為右孩子節點,置k=2;
3.若ch=』)』:表示棧中節點的左右孩子節點處理完畢,退棧;
4.其他情況:
當k=1時,表示這個節點作為棧中節點的左孩子節點;
當k=2時,表示這個節點作為棧中節點的右孩子節點
如此迴圈直到str處理完畢
建立後的二叉樹效果如下:
查詢節點findnode(*b,x):
用遞迴演算法,採用」根-左子樹-右子樹」的順序,查詢值為x的節點,找到值為x的結點後返回節點指標,否則返回null。
btnode *findnode(btnode *b,elemtype x)
}
以btnode r1=*findnode(b, 『c』);為例,我們來看一下查詢節點演算法的遞迴呼叫過程:
a是根節點,以根—左—右的順序遍歷節點,直到找到c節點為止。
直接返回*p節點的左孩子節點或右孩子節點的指標。
//找左孩子節點
btnode *lchildnode(btnode *p)
//找右孩子節點
btnode *rchildnode(btnode *p)
1. 當樹為null時,說明這是一棵空樹,而空樹的高度為0
2. 當樹不為null時,說明這棵樹有節點,因此可以求出樹的左子樹和右子樹的高度,並返回其中最大的高度 + 1。
int btnodedepth(btnode *b)
}
用括弧表示法輸出二叉樹:
對於非空二叉樹b
先輸出其元素值
當存在左孩子或右孩子節點時
輸出乙個「(」符號
遞迴處理左子樹
如果左子樹不為null,則輸出乙個「,」符號
遞迴處理右子樹
最後輸出乙個「)」符號
void dispbtnode(btnode *b)}}
二叉樹 基本運算
一 括號表示法建二叉樹 核心 void make btree print b view code 二 查詢節點 核心 btnode find node btnode b1,char x 查詢節點數值等於x的節點 view code 三 求樹高 核心 int get high const btnode...
二叉樹的基本運算
今天資料結構實驗課,做實驗,二叉樹的基本運算,題目要求挺長的,上課坐著沒事幹,寫了一點,放這以後還能看看。呵呵 題目要求 問題描述 建立一棵二叉樹,試程式設計實現二叉樹的如下基本操作 1.按先序序列構造一棵二叉鍊錶表示的二叉樹t 2.對這棵二叉樹進行遍歷 先序 中序 後序以及層次遍歷,分別輸出結點的...
二叉樹的基本運算
編寫乙個程式實現二叉樹的基本功能 1 使用者輸入字串建立二叉樹,a b d,e h j,k l,m n c f,g i 2 1 實現二叉樹的各種遍歷。包括先序遍歷 中序遍歷 後序遍歷的歸和非遞迴演算法 以及層次遍歷。2 要求能查詢任一結點在某種遍歷序列中的前驅和後繼。3 查詢輸出從根結點a出發到任意...