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