目錄:
分析順序儲存二叉樹的優缺點使用孩子法實現二叉樹
1.二叉樹的順序結構
普通的二叉樹不適合用陣列來儲存,因為可能會造成大量的空間浪費。而完全二叉樹更適合利用順序結構儲存。現實中我們通常把堆(一種二叉樹)使用順序結構的陣列來儲存,需要注意的是這裡的堆操作和作業系統虛擬程序位址空間是兩回事,乙個是資料結構,乙個是作業系統中管理記憶體的一塊區域分段。
2.下面我們來看孩子法實現二叉樹程式:
標頭檔案bintree.h**如下:
#pragma once
//二叉樹的鏈式儲存方式--孩子表示法
typedef int btdatatype;
typedef struct btnodebtnode;
//獲取二叉樹
btnode* buybintreenode(btdatatype data);
//二叉樹的建立
btnode* _creatbintree(btdatatype* array, int size, int* index, btdatatype invalid);
//重新包裝
btnode* creatbintree(btdatatype* array, int size, btdatatype invalid);
//二叉樹的拷貝(查詢概念)
void* copybintree(btnode* proot);
//前序遍歷
void preorder(btnode* proot);
//中序遍歷
void inorder(btnode* proot);
//後序遍歷
void posorder(btnode* proot);
//獲取二叉樹中第k層結點的個數
void getklevelnodecount(btnode* proot, int k);
//獲取二叉樹中的結點
int getbintreesize(btnode* proot);
//葉子結點個數
int getleafcount(btnode* proot);
//獲取樹的高度
void getbintreeheight(btnode* proot);
//元素在樹中位置的查詢
btnode bintreefind(btnode* proot, btdatatype x);
//銷毀
void destroybintree(btnode** proot);
//測試
void testbintree();
原始檔bintree.c**如下:
#include "bintree.h"
#include #include #include #include //獲取二叉樹
btnode* buybintreenode(btdatatype data)
pnewnode->_data = data;
pnewnode->_pleft = null;
pnewnode->_pright = null;
return pnewnode;
}//二叉樹的建立
btnode* _creatbintree(btdatatype* array, int size, int* index, btdatatype invalid)
return proot;
}//重新包裝
btnode* creatbintree(btdatatype* array, int size,btdatatype invalid)
//前序遍歷
void preorder(btnode* proot)
}//中序遍歷
void inorder(btnode* proot)
}//後序遍歷
void posorder(btnode* proot)
}//葉子結點個數
int getleafcount(btnode* proot)
if (null == proot->_pleft && null == proot->_pright)
return getleafcount(proot->_pleft) + getleafcount(proot->_pright);
}//銷毀(後序方法)
void destroybintree(btnode** proot)
}//測試
void testbintree()
測試**:
#include "bintree.h"
int main()
~bye~ 資料結構 鏈式二叉樹
include using namespace std typedef struct treenode treenode,treep 初始化二叉樹 void init tree treep root 前序遍歷二叉樹 void pre order treep rt 中序遍歷二叉樹 void mid o...
資料結構 鏈式二叉樹
define error 0 define true 1 define false 0 status是函式的型別,其值是函式結果狀態 如ok等 typedef int status typedef int telementtype ifndef bitree h included define bi...
資料結構 鏈式二叉樹
include iostream using namespace std typedef struct treenode treenode,treep 初始化二叉樹 void init tree treep root 建立二叉樹 void creat tree treep rt 前序遍歷二叉樹 vo...