資料結構-樹與森林-雙親表示法
阿新 • • 發佈:2018-12-16
以一組連續空間儲存結點,各結點附設指示器指示其雙親結點的位置(資料域加雙親下標域)。
首先是輔助巨集:
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define UNDERFLOW -2
#define NULL 0
#define MAX_PTREE_SIZE 50010 //樹的最大結點數目
typedef int Status;
typedef int TElemType;
樹與森林的雙親表示法儲存結構定義:
typedef struct TNode{ //樹的結點 TElemType data; int parent; //雙親下標 int flag; //標記 bool ba; //是否是平衡二叉樹 int lchild,rchild; //左右孩子下標 }TNode; typedef TNode PTree[MAX_PTREE_SIZE];
在二叉樹PT中 找包含a,b兩結點的最小子樹。
int FindSmallestPTree(PTree PT,int a,int b){ //在二叉樹PT中 找包含a,b兩結點的最小子樹 int x=a; while(PT[x].parent){ //a結點不斷向上直到根節點 並把走過的結點標記修改為1 PT[x].flag=1; x=PT[x].parent; } PT[x].flag=1; int y=b; while(!PT[y].flag) //b結點不斷向上直到遇到flag 為1的結點 就是最小子樹根節點 y=PT[y].parent; x=a; while(PT[x].parent){ //a結點不斷向上直到根節點 並把走過的結點標記修改為1 //別忘了每次都消除標記 PT[x].flag=0; x=PT[x].parent; } return y; }