樹的ADT實現

2021-08-02 06:10:01 字數 1242 閱讀 4285

假設二叉樹的資料元素為字元,採用二叉鏈式儲存。請程式設計實現下列操作:

(1) 建立二叉樹(完全前序或前序+中序);

(2)遍歷二叉樹(深度、層次);

(3)求給定元素的雙親;

(4)求二叉樹的高度;

(5)計算葉子數;

(6)判斷是否完全二叉樹

在這裡我用了完全前序建立的二叉樹;

#include #include #include using namespace std;

struct node//數的節點

;struct info//記錄樹節點的一些資訊,判斷是否為完全二叉樹時用

;class myqueue//佇列adt實現,用於樹的廣度遍歷

void push(node* a)

node* pop()

bool isempty()//判斷是否為空

};int create(string str,int i,node *&root)//給定一串字串,用@隔開,用於建立一棵二叉樹

}void visitqian(node *root)//前序遍歷

}void visitzhong(node *root)//中序遍歷

}int height(node *root)//求樹的高度

}void visithou(node *root)//後續遍歷

}void visitguang(node *root)//廣度遍歷

}}bool match(node *root,char tar)//判斷root的兒子的ch是否為tar

else if(root->leftchild!=null)

else if(root->rightchild!=null)

}char parent(node *root,char tar)//求ch為tar的節點的雙親

}int leafnmu(node *root)//葉子節點的數目

int nonleafnmu(node *root)//非葉子節點的數目

info iswanquanercha(node *root)//判斷該樹是否為完全二叉樹,判斷依據為任意結點的左子樹的高度比右子樹高1或相等

else

}int main()

{ cout<<"請輸入帶有標誌位的完全前序序列,以『@』未標識"<>str;

node *root = null;

create(str,0,root);

visitguang(root);

cout<

佇列ADT實現

佇列也比較的簡單,先進先出。流行的做法也是用陣列實現。結構體如下 struct queue include include struct queue typedef struct queue queue 建立乙個空的佇列 形參代表這個佇列的長度最大是多少 queue createqueue int ...

優先佇列ADT的實現

優先佇列是一種特殊的佇列,基於二叉堆實現,在插入 刪除元素上具有較好的演算法效能。由於二叉堆的高度為logn,故在插入 刪除元素時最多調整logn次,時間複雜度為o logn 給出優先佇列adt的 其中priority judge為優先順序判斷。一般來說,在插入 刪除操作時,優先順序較高的應往堆頂調...

鍊錶ADT實現

鍊錶煉表有一系列不必再記憶體中連續的結構組成,不需要使用位址連續的儲存單元。它是通過 鏈 來建立邏輯關係的,因此在對鍊錶進行插入,刪除操作時不需要移動元素,而只需要修改指標即可。鍊錶分類 按是否包含指向前繼的指標可分為單鏈表和雙向鍊錶 按是否成環狀可以分為迴圈鍊錶和非迴圈鍊錶。由於連表示離散的分布在...