void LevelOrder(node* p)
{
Queue<node *> Q;
Bool LevelFirst=false;
Q.Enqueue(root);
while(quene is not empyty)
{
Q.Dequeue(p);
if(q==LevelHead)
{
p=Q.Dequeue(p);
LevelFirst=true;
cout<<endl;
cout<<q->data;
}
else
{
cout<<q->data;
}
if(p->left)
{
if(LevelFirst=true)
{
Q.Enqueue(LevelHead);LevelFirst=False;
}
Q.Enqueue(p->left);
}
if(p->right)
{
if(LevelFirst=true)
{
Q.Enqueue(LevelHead);LevelFirst=False;
}
Q.Enqueue(p->right);
}
}
}void PrintNodeByLevel(Node* root) {
vector<Node*> vec; // 这里我们使用STL 中的vector来代替数组,可利用到其动态扩展的属性
vec.push_back(root);
int cur = 0;
int last = 1;
while(cur < vec.size()) {
Last = vec.size(); // 新的一行访问开始,重新定位last于当前行最后一个节点的下一个位置
while(cur < last) {
cout << vec[cur] -> data << " "; // 访问节点
if(vec[cur] -> lChild) // 当前访问节点的左节点不为空则压入
vec.push_back(vec[cur] -> lChild);
if(vec[cur] -> rChild) // 当前访问节点的右节点不为空则压入,注意左右节点的访问顺序不能颠倒
vec.push_back(vec[cur] -> rChild);
cur++;
}
cout << endl; // 当cur == last时,说明该层访问结束,输出换行符
}
}void PrintNodeByLevel(Node* root) {
queue<Node*> Q;
Q.push(root);
Q.push(0);
do {
Node* node = Q.front();
Q.pop();
if (node) {
cout << node->data << " ";
if (node->pLeft)
Q.push(node->pLeft);
if (node->pRight)
Q.push(node->pRight);
}
else if (!Q.empty()) {
Q.push(0);
cout << endl;
}
} while (!Q.empty());
}4.思路正确,代码逻辑不一定正确,20 80原理
另外看到还有一个求十进制表示的二进制数的1的位数,Hamming_weight,也才知道还有个名词
编程之美问题之二叉树层序遍历多种解法,布布扣,bubuko.com
原文:http://blog.csdn.net/richardzrc/article/details/27677067