二叉樹的各種操作複習

2022-09-23 08:30:08 字數 1521 閱讀 2459

[cpp] 

/*二叉樹的各種操作複習*/ 

#include  

#define back_oder   -1 

#define in_oder     0 

#define pre_oder    1 

#define level_oder  2//層次化遍歷 

typedef struct _node node,*tree; 

/* 生成二叉樹的普通方法

* 按先序次序輸入二叉樹中結點的值

* 構造二叉鍊錶表示的二叉樹t。輸入空格表示空子樹。 */ 

node * createtree() 

return t; 

} /* 由先根序列和中根序列生成二叉樹

* 遞迴法。pre 是先跟序列,in是中根序列

* pre_s是先根序列的起始,pre_e是先跟序列的結束

* in_s是中根序列的起始,in_e是中根序列的結束

*/ node *convert(char pre, int pre_s, int pre_e, 

char in , int in_s , int in_e ) 

/*求二叉樹的度*/ 

int getdegree(const tree head) 

return degree; 

} /*求二叉樹的高度*/ 

int gethight(const tree head) 

/* 輸出二叉樹中某個指定元素的祖父節點(包括自己)

* 遞迴思想:如果此節點在其子樹中,那麼它是祖父節點

* 返回值 :1表示子樹中有 ,0表示無*/ 

int getgrandpa(const tree head, const char e) 

else return 0; 

} /*遍歷二叉樹,引數oder控制遍歷方式*/ 

void tranverse(node *head,int oder)   

if(pre_oder == oder) printf("%c\t",head->data); 

tranverse(head->lchild,oder); 

if(in_oder == oder) printf("%c\t",head->data); 

tranverse(head->rchild,oder); 

if(back_oder == oder) printf("%c\t",head->data); 

return; 

} /* 層次化遍歷,採用遞迴思想而不用佇列。

* 遞迴思想:把當前層遍歷的同時把下一層儲存好

* nodes儲存的當前層的節點,count表示當前層的元素個數*/ 

void levtranverse(const node* nodes, int count) 

;     for(i = 0,j=0; i

levtranverse(nextnodes,j); 

return; }  

int main(int argc, char *ar**) 

二叉樹的各種遍歷操作

作 者 王鵬 完成日期 2016年 3 月 13 日 問題描述 二叉樹的各種遍歷操作 輸入描述 以 代替樹的兒子為空,如輸入 abd fe cg h i 程式輸出 如 所示 include includetypedef struct treenode bitree typedef struct tr...

複習 二叉樹 樹

樹是一種很常用的資料結構,日後的學習中會經常碰到運用樹的知識。構造二叉樹 include include include using namespace std 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空...

複習二叉樹之線索二叉樹

include 線索二叉樹是在遍歷的過程中線索化 typedef struct bithrnodebithrnode,bithrtree bithrtree pre 全域性變數 建立二叉鍊錶 先序遍歷建立 關鍵在於 表明空樹 void createbitree bithrtree a else 為什...