1. 程式人生 > >資料結構-樹與森林-雙親表示法

資料結構-樹與森林-雙親表示法

 以一組連續空間儲存結點,各結點附設指示器指示其雙親結點的位置(資料域加雙親下標域)。

首先是輔助巨集:

#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;
}