首先,这是我第一次写博客,就简单些好了。。
通过两个队列,一个用来存储接收节点信息,一个用来遍历,然后用一个bool数来确定当前的运行状态;
这大概就是这个函数的大致思维了。。
我编写了一个可以判断如题的函数,它将返回我所需要的结果(bool形式):
bool LevelOrder(BinTreeNode<T>* t){ bool b=1; //b代表到目前为止,是否满足完全树 queue<BinTreeNode<T>*> A,B,C; BinTreeNode<T>*q; A.push(t); loop: do{ q=A.back(); A.pop(); if (b == FALSE){ if (q->GetLeft() != NULL&&q->GetRight() != NULL)return FALSE; if (A.empty() && B.empty()){ return TRUE; } } if (q->GetLeft() != NULL&&q->GetRight() != NULL){ B.push(q->GetLeft()); B.push(q->GetRight()); } if (q->GetLeft()==NULL&&q->GetRight()==NULL){ if (A.empty() && B.empty()){ return TRUE; } b = FALSE; } if(q->GetLeft()==NULL&&q->GetRight()!=NULL)return FALSE; if (q->GetLeft() != NULL&&q->GetRight() == NULL){ b = FALSE; } } while (!A.empty()); if (!B.empty()){ C = A; A = B; B = C; goto loop; } return TRUE; }
代码是自己写的,所以可能有些不好看,甚至用了goto的大忌语句,不过看在我用好久时间思考的份上,我就勉强接受了。