公共標頭檔案common.h
#pragma once
#include#include#include#includetypedef char btdatatype;
typedef struct binarytreenode
btnode;
typedef btnode* qdatatype;
typedef struct queuenode
queuenode;
typedef struct queue
queue;
二叉樹相關介面的介紹btree.h
#ifndef __btree_h__
#define __btree_h__
#include"common.h"
//通過前序遍歷的陣列"abd##e#h##cf##g##"構建二叉樹
btnode* binarytreecreate(btdatatype* array, int* pindex);
void binarytreedestory(btnode** root);
int binarytreesize(btnode* root);
int binarytreeleafsize(btnode* root);
int binarytreelevelsize(btnode* root, int k);
btnode* binarytreefind(btnode* root, btdatatype x);
//遍歷
void binarytreeprevorder(btnode* root);
void binarytreeinorder(btnode* root);
void binarytreepostorder(btnode* root);
//層序遍歷
void binarytreelevelorder(btnode* root);
//判斷二叉樹是否為完全二叉樹
int binarytreecomplete(btnode* root);
void btreetest();
#endif //__btree_h__
佇列標頭檔案queue.h(為實現二叉樹的層序遍歷)
#pragma once
#include"common.h"
void queueinit(queue* pq);
void queuedestory(queue* pq);
void queuepush(queue* pq,qdatatype x);
void queuepop(queue* pq);
qdatatype queuefront(queue* pq);
int queueempty(queue* pq);
int queuesize(queue* pq);
void queueprint(queue* pq);
void queuetest();
佇列介面的實現queue.c
#include"common.h"
#include"queue.h"
//佇列的初始化
void queueinit(queue* pq)
void queuedestory(queue* pq) }
void queuepush(queue* pq, qdatatype x)
int queueempty(queue* pq)
int queuesize(queue* pq)
} return count;
}void queuepop(queue* pq)
pq->_head->_next = cur->_next;//刪除第乙個元素
free(cur);
}qdatatype queuefront(queue* pq)
void queueprint(queue* pq)
printf("\n");
}void queuetest()
二叉樹相關介面的實現btree.h
#define _crt_secure_no_warnings
#include"common.h"
#include"btree.h"
#include"queue.h"
//通過前序遍歷的陣列"abd##e#h##cf##g##"構建二叉樹
btnode* binarytreecreate(btdatatype* array, int* pindex)
btnode* root = (btnode*)malloc(sizeof(btnode));
root->_left = null;
root->_right = null;
root->_data = array[(*pindex)];
(*pindex)++;
root->_left = binarytreecreate(array, pindex);
root->_right = binarytreecreate(array, pindex);
return root; }
void binarytreedestory(btnode** root)
int binarytreesize(btnode* root)
//int binarytreeleafsize(btnode* root)
//int binarytreeleafsize(btnode* root)
int binarytreelevelsize(btnode* root, int k)
btnode* binarytreefind(btnode* root, btdatatype x)
//遍歷
void binarytreeprevorder(btnode* root)
void binarytreeinorder(btnode* root)
void binarytreepostorder(btnode* root)
//層序遍歷
void binarytreelevelorder(btnode* root)
printf("\n"); }}
//判斷二叉樹是否為完全二叉樹
int binarytreecomplete(btnode* root)
while (queueempty(&q) != 0)
queuepop(&q);
} }return 1;
}void btreetest()
資料結構 二叉樹 反轉二叉樹
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 ...
《資料結構》 二叉樹
二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...
資料結構 二叉樹
1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...