二叉樹的實現

2021-10-18 22:44:07 字數 3772 閱讀 1175

一、sysutil.h//系統標頭檔案

#ifndef _sysutil_h_

#define _sysutil_h_

#include

#include

#include

#include

#include

#pragma warning (disable:4996)

#include

//記憶體洩漏工具的標頭檔案

#include

#endif

二、tree.h//二叉樹實現函式的檔案

#include

"sysutil.h"

typedef

char btdatatype;

typedef

struct binarytreenode

btnode;

// 通過前序遍歷的陣列"abd##e#h##cf##g##"構建二叉樹

btnode*

binarytreecreate

(btdatatype* a,

int n,

int* pi)

;// 二叉樹銷毀

void

binarytreedestory

(btnode*

* root)

;// 二叉樹節點個數

intbinarytreesize

(btnode* root)

;// 二叉樹葉子節點個數

intbinarytreeleafsize

(btnode* root)

;// 二叉樹第k層節點個數

intbinarytreelevelksize

(btnode* root,

int k)

;// 二叉樹查詢值為x的節點

btnode*

binarytreefind

(btnode* root, btdatatype x)

;// 二叉樹前序遍歷

void

binarytreeprevorder

(btnode* root)

;// 二叉樹中序遍歷

void

binarytreeinorder

(btnode* root)

;// 二叉樹後序遍歷

void

binarytreepostorder

(btnode* root)

;// 層序遍歷

void

binarytreelevelorder

(btnode* root)

;// 判斷二叉樹是否是完全二叉樹

intbinarytreecomplete

(btnode* root)

;btnode*

binarytreecreate

(btdatatype* a,

int n,

int* pi)

else}}

void

binarytreedestory

(btnode*

* root)

}binarytreesize

(btnode* root)

intbinarytreeleafsize

(btnode* root)

}int

binarytreelevelksize

(btnode* root,

int k)

btnode*

binarytreefind

(btnode* root, btdatatype x)

void

binarytreeprevorder

(btnode* root)

}void

binarytreeinorder

(btnode* root)

}void

binarytreepostorder

(btnode* root)

}#include

"queue.h"

void

binarytreelevelorder

(btnode* root)}}

#include

"queue.h"

intbinarytreecomplete

(btnode* root)

if(cur->_left)

if(tag &&

(cur->_left || cur->_right))if

(cur->_right)

else

linkqueuede

(&q);}

}

三、queue.h//佇列實現函式,這裡是為了在層次訪問的時候使用。

#ifndef _queue_h_

#define _queue_h_

#include

"sysutil.h"

struct btnode;

#define queueelemtype struct btnode*

//鏈佇列

typedef

struct linkqueuenode

linkqueuenode;

typedef

struct linkqueue

linkqueue;

void

linkqueueinit

(linkqueue *pq)

;void

linkqueuedestroy

(linkqueue *pq)

;void

linkqueueen

(linkqueue *pq, queueelemtype x)

;void

linkqueuede

(linkqueue *pq)

;void

linkqueueshow

(linkqueue *pq)

;queueelemtype linkqueueback

(linkqueue *pq)

;queueelemtype linkqueuefront

(linkqueue *pq)

;bool linkqueueempty

(linkqueue *pq)

void

linkqueueinit

(linkqueue *pq)

void

linkqueueen

(linkqueue *pq, queueelemtype x)

}void

linkqueuede

(linkqueue *pq)

}void

linkqueueshow

(linkqueue *pq)

printf

("nil.\n");

}queueelemtype linkqueueback

(linkqueue *pq)

queueelemtype linkqueuefront

(linkqueue *pq)

void

linkqueuedestroy

(linkqueue *pq)

pq->head = pq->tail =

null;}

#endif

四、testmain.c//主函式

#include

"tree.h"

intmain()

二叉樹 排序二叉樹的簡單實現

二叉樹 排序二叉樹 include using namespace std 二叉樹的節點 date 資料 left 指向二叉樹的左子樹 right 指向二叉樹的右子樹 template struct node template class btree public btree root null c...

二叉樹實現

include include include include define maxsize 100 define ok 1 define error 0 define true 1 define false 0 typedef int status typedef int telemtype ty...

二叉樹實現

課內最近學了二叉樹,參考書上的 做了二叉樹的實現,尚不完善,還有很多地方不明白。二叉樹實現。define maxsize 100 include using namespace std 定義二叉樹節點 class btnode void createbt btnode bt,char str voi...