算法题---完全二叉树的判定
Posted raye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题---完全二叉树的判定相关的知识,希望对你有一定的参考价值。
思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:
●某节点没有左孩子,则一定无右孩子
●若某节点缺左或右孩子,则其所有后继一定无孩子
若不满足上述任何一条,均不为完全二叉树。
void IsComplete_BiTree(BiTree T) { if (T == NULL) { cout << "NULL BITREE error!" << endl; return; } Node*Q[MAXSIZE];Node*p=NULL; int f = 0; int r = 0; int final_judge = 1; //迄今为止二叉树为完全二叉树。初值为1。 int flag = 1; //迄今为止所有节点均有左右孩子。初值为1。 Q[r]= T; r++; p = T; while (f != r) { p=Q[f]; f++; /*p结点没有左孩子*/ if (p->lc == NULL) { flag = 0; if (p->rc != NULL) //没有左孩子但有右孩子 final_judge = 0; //则不是完全二叉树 } /*p结点有左孩子*/ else { if (flag == 1) //迄今为止所有结点都有左、右孩子 { Q[r] = p->lc; r++; //左孩子入队 if (p->rc) //有右孩子,则右孩子入队 { Q[r] = p->rc; r++; } else flag = 0; //否则,flag置0 } else //迄今为止已有结点缺孩子 final_judge = 0; } } if (final_judge == 1) cout << "是完全二叉树。" << endl; else cout << "不是完全二叉树。" << endl; return; }
以上是关于算法题---完全二叉树的判定的主要内容,如果未能解决你的问题,请参考以下文章
⭐算法入门⭐《二叉树》简单06 —— LeetCode 222. 完全二叉树的节点个数
代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数