1.判斷二叉樹是否是完全二叉樹?
辨別:
不能使用遞歸或者算節點個數和高度來判斷。
滿二叉樹可以用高度和節點來判斷,因為是完整的。
但是完全二叉樹前面是滿的,但是最后一層是從左到右連續這種
如果仍然用這種方法的話,如下圖兩個識別方法是一樣的,但是無法準確識別
完全二叉樹:前h-1層是滿的,最后一層是從左到右連續。
如果走層序那么一定是連續的,也就是說要通過層序遍歷來走。
思路:1.層序遍歷走,空也進序列。
2.遇到第一個空時開始判斷,如果后面都為空則是完全二叉樹,若空后面還出席那非空的情況則說明不是完全二叉樹。
代碼實現:
//判斷二叉樹是否是完全二叉樹
bool TreeComplete(BTNode* root)
{ Queue q;//仍然使用隊列去實現QueueInit(&q);if (root)QueuePush(&q,root)while (!QueueEmpty){BTNode* front = QueueFront(&q);QueuePop(&q);//遇到第一個空就可以開始判斷,如果隊列中還有非空,就不是完全二叉樹。if (front == NULL){break;}QueuePush(&q, front->left);QueuePush(&q, front->right);}while (!QueueEmpty){BTNode* front = QueueFront(&q);QueuePop(&q);//如果仍有非空元素,直接
// return false;if (front){QueueDestroy(&q);//如果存在非空。return false;}QueueDestroy(&q);return true;
//最終QueueDestroy,再返回}
}