二叉樹的鏈式儲存結構及實現(C語言完整程式碼+詳細註釋)
阿新 • • 發佈:2018-12-20
鏈式儲存結構儲存二叉樹,實際上就是採用連結串列儲存二叉樹。
既然是使用連結串列,首先需要構建連結串列中節點的結構。考慮到儲存物件為二叉樹,其各個節點最多包含 3 部分,依次是:左孩子、節點資料和右孩子,因此,連結串列的每個節點都由這 3 部分組成:
圖 1 二叉連結串列結點構成
圖 1 中,
結點結構用程式碼表示為:
如果後期再使用連結串列的過程中需要頻繁地訪問某結點的父結點,可以在構建連結串列時使用下面這種結點結構:
圖 2 三叉連結串列結點構成
圖 2 中,
結點結構程式碼表示:
例如,下圖為分別用以上兩種節點結構構建的二叉樹:
圖 3 單支樹示意圖
圖 3 中二叉連結串列的C語言實現程式碼如下:
執行結果:
3
既然是使用連結串列,首先需要構建連結串列中節點的結構。考慮到儲存物件為二叉樹,其各個節點最多包含 3 部分,依次是:左孩子、節點資料和右孩子,因此,連結串列的每個節點都由這 3 部分組成:
圖 1 二叉連結串列結點構成
圖 1 中,
Lchild
代表指向左孩子的指標域;data
為資料域;Rchild
代表指向右孩子的指標域。使用此種結點構建的二叉樹稱為“二叉連結串列”。結點結構用程式碼表示為:
typedef struct BiTNode{ TElemType data;//資料域 struct BiTNode *lchild,*rchild;//左右孩子指標 }BiTNode,*BiTree;
圖 2 三叉連結串列結點構成
圖 2 中,
Lchild
指向左孩子;Rchild
指向右孩子;data
為資料域;parent
指向父結點。使用這種結構的結點建立的樹稱為“三叉連結串列”。結點結構程式碼表示:
typedef struct BiTNode{ TElemType data;//資料域 struct BiTNode *lchild,*rchild;//左右孩子指標 struct BiTNode *parent; }BiTNode,*BiTree;
圖 3 單支樹示意圖
圖 3 中二叉連結串列的C語言實現程式碼如下:
#include <stdio.h> #include <stdlib.h> #define TElemType int typedef struct BiTNode{ TElemType data;//資料域 struct BiTNode *lchild,*rchild;//左右孩子指標 }BiTNode,*BiTree; void CreateBiTree(BiTree *T){ *T=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->data=1; (*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->rchild=NULL; (*T)->lchild->data=2; (*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode)); (*T)->lchild->rchild=NULL; (*T)->lchild->lchild->data=3; (*T)->lchild->lchild->lchild=NULL; (*T)->lchild->lchild->rchild=NULL; } int main() { BiTree Tree; CreateBiTree(&Tree); printf("%d",Tree->lchild->lchild->data); return 0; }