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