資料結構 二叉樹練習 遞迴

2021-07-12 03:46:48 字數 2115 閱讀 2054

/*

以孩子兄弟鏈作為樹的儲存結構,編寫乙個求樹高度的遞迴演算法。

遞迴模型:

設f(t)為樹t的高度:

f(t)=0 若t==null

f(t)=1 若t沒有孩子節點

f(t)=max(f(p))+1 其他情況 (p為t的孩子)

*/int treeheight(tsbnode *t)

return (max+1);}}

/*

二叉樹應用練習:(假設二叉樹採用二叉鏈儲存結構)

(1)計算二叉樹結點個數;

(2)輸出一顆給定二叉樹的所有葉子節點;

(3)求二叉樹中節點值為x的節點的層數;

(4)判斷兩顆二叉樹是否相似,所謂二叉樹b1和b2相似是指b1和b2都是空樹;或者b1和b2的根節點相似,且左子樹和右子樹分別相似;

(5)輸出值為x的節點的所有祖先。

*/#include #include #define maxsize 100

typedef char elemtype;

using namespace std;

typedef struct node

btnode;

void createbtnode(btnode *&b,char *str) //建立二叉樹}}

j++;

ch=str[j]; //迴圈str中的每個字元

}}/*

遞迴模型:

f(b)=0 ,b==null

f(b)=f(b->lchild)+f(b->rchild)+1 ,其他情況

*/int nodes(btnode *b) //計算節點的個數

/*遞迴模型:

f(b)=不作任何事件 若b==null

f(b)=輸出*b節點的data域 若*b為葉子節點

f(b)=f(b->lchild);f(b)=(b->rchild) 其他情況

*/void displeaf(btnode *b)}/*

遞迴模型:

f(b)=0 若b==null

f(b)=h 若b->data==x

f(b)=level(b->lchild);level(b->rchild) 其他情況

*/int level(btnode *b,elemtype x,int h) //h置初值為1}/*

遞迴模型:

f(t1,t2)=true 若t1=t2=null

f(t1,t2)=false 若t1、t2之一為null,另乙個不為null

f(t1,t2)=f(t1->lchild,t2->lchild)&&f(t1->rchild,t2->rchild); 其他情況

*/bool like(btnode *b1,btnode *b2) //b1和b2兩棵二叉樹相似時返回true,否則返回false}/*

遞迴模型:

f(b,x)=false 若b==null

f(b,x)=true,並輸出b->data 若*b節點的左或右孩子data域為x

f(b,x)=true,並輸出b->data 若f(b->lchild,x)==true或f(b->rchild,x)==true

f(b,x)=false 其他情況

*/bool ancestor(btnode *b,elemtype x) //輸出節點值為x的祖先

資料結構 遞迴實現二叉樹

二叉樹 在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用於實現二叉查詢樹和二叉堆。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至...

遍歷二叉樹(資料結構,遞迴)

在二叉樹的應用中,常常要求在樹中查詢具有某種特徵的結點,或者對全部結點逐一進行某種處理。這就是二叉樹的遍歷問題。所謂二叉樹的遍歷是指按一定的規律和次序訪問樹中的各個結點,而且每個結點僅被訪問一次。訪問 的含義很廣,可以是對結點作各種處理,如輸出結點的資訊等。遍歷一般按照從左到右的順序,共有3種遍歷方...

資料結構 二叉樹 反轉二叉樹

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 ...