判断一棵树是否是完全二叉树

r囧r小猫 2022-04-18 01:46 356阅读 0赞

首先要知道完全二叉树的定义: 前n-1层都是满的,第n层如有空缺,则是右边有空缺,即第n层的右边的某个节点开始有空缺,它的左边是满的,右边是空的。

以二叉搜索树举例。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef struct BNode* BTree;
  4. struct BNode
  5. {
  6. int data;
  7. BTree left;
  8. BTree right;
  9. };
  10. void Insert(BTree &t,int data){
  11. if(!t){
  12. BTree p=(BTree)malloc(sizeof(BTree));
  13. p->data=data;
  14. p->left=NULL;
  15. p->right=NULL;
  16. t=p;
  17. }
  18. else if(data<t->data)Insert(t->left,data);
  19. else if(data>=t->data)Insert(t->right,data);
  20. }
  21. bool IsComplateTree(BTree root){
  22. queue<BTree> q;
  23. if (root){
  24. q.push(root);
  25. }
  26. bool f = true;
  27. while (!q.empty()){
  28. BTree front = q.front();
  29. q.pop();
  30. if (front->left){
  31. if (f == false){
  32. return false;
  33. }
  34. q.push(front->left);
  35. }
  36. else f = false;
  37. if (front->right){
  38. if (f == false){
  39. return false;
  40. }
  41. q.push(front->right);
  42. }
  43. else f = false;
  44. }
  45. return true;
  46. }
  47. int main()
  48. {
  49. int n;
  50. int a[1001];
  51. cin>>n;
  52. BTree t=NULL;
  53. for(int i=0;i<n;i++){
  54. cin>>a[i];
  55. Insert(t,a[i]);
  56. }
  57. if(IsComplateTree(t))cout<<"YES"<<endl;
  58. else cout<<"NO"<<endl;
  59. }

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读