目錄
一、二叉樹的順序存儲
#define MaxSize 100
struct TreeNode{
ElemType value; //結點中的數據元素
bool isEmpty; //結點是否爲空
};
TreeNode t[MaxSize];
定義一個長度爲MaxSize的數組t,按照從上至下、從左至右的順序依次存儲完全二叉樹中的各個結點
幾個重要常考的基本操作:
若完全二叉樹中共有n個結點,則
若不是完全二叉樹,依次按層序將各節點順序存儲,無法從結點編號反映出結點間的邏輯關係
二、二叉樹的鏈式存儲
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,rchild;
}BiTNode,*BiTree;
n個結點的二叉鏈表共有n+1個空鏈域,可用於構造線索二叉樹
struct ElemType{
int value;
};
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//定義一棵空樹
BiTree root = NULL;
//插入根節點
root = (BiTree)malloc(sizeof(BiTNode));
root->data = {1};
root->lchild = NULL;
root->rchild = NULL;
//插入新結點
BiTNode *p = (BiTNode *)malloc(sizeof(BiTNode));
p->data = {2};
p->lchild = NULL;
p->rchild = NULL;
root->lchild = p; //作爲根節點的左孩子
思考:
如何找到指定結點p的父節點?
只能從根開始遍歷尋找
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
struct BiTNode *parent; //父節點指針 三叉鏈表——方便找父節點
}BiTNode,*BiTree;