假設二叉樹的資料元素為字元,採用二叉鏈式儲存。請程式設計實現下列操作:
(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實現
鍊錶煉表有一系列不必再記憶體中連續的結構組成,不需要使用位址連續的儲存單元。它是通過 鏈 來建立邏輯關係的,因此在對鍊錶進行插入,刪除操作時不需要移動元素,而只需要修改指標即可。鍊錶分類 按是否包含指向前繼的指標可分為單鏈表和雙向鍊錶 按是否成環狀可以分為迴圈鍊錶和非迴圈鍊錶。由於連表示離散的分布在...