/*
以孩子兄弟鏈作為樹的儲存結構,編寫乙個求樹高度的遞迴演算法。
遞迴模型:
設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 ...