题目(微软):
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ /
6 10
/ / / /
5 7 9 11输出86 10 5 7 9 11。
这题在我前面的题目中已经实现过了,现在贴过来用用。
#include<iostream> using namespace std; struct BTree{ BTree(int _v):value(_v), left(NULL), right(NULL) {} int value; BTree* left; BTree* right; void add(BTree* _bt) { if(_bt->value < value) { if(left == NULL) left = _bt; else left->add(_bt); } else { if(right == NULL) right = _bt; else right->add(_bt); } } }; template <typename T, int size=1024> class queue{ private: T data[size]; int begin, end; public: queue():begin(0),end(0){} bool empty() { return begin == end; } void push(T& _d) { if((end +1)%size == begin) { cout << "queue is full, cann‘t push any node." <<endl; return; } data[end] = _d; end = (end + 1)%size; } T& pop(T& _t) { if(end == begin) { cout << "queue is empty, cann‘t pop any node." <<endl; return _t; } _t = data[begin]; begin = (begin + 1)%size; return _t; } }; void print(BTree* root) { queue<BTree*> q; BTree* node = root; BTree _n1(-1);//空标记 q.push(node); while(!q.empty()) { BTree* _bsn = &_n1; q.pop(_bsn); cout << _bsn->value << " "; if(_bsn->left != NULL) q.push(_bsn->left); if(_bsn->right != NULL) q.push(_bsn->right); } } int main() { BTree* root; BTree bt1(8); BTree bt2(6); BTree bt3(10); BTree bt4(5); BTree bt5(7); BTree bt6(9); BTree bt7(11); root = &bt1; root->add(&bt2); root->add(&bt3); root->add(&bt4); root->add(&bt5); root->add(&bt6); root->add(&bt7); cout << "按层次,从左到右打印结果为:"; print(root); cout << endl; return 0; }
输出结果为:按层次,从左到右打印结果为:8 6 10 5 7 9 11
14. 微软面试题:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。,布布扣,bubuko.com
14. 微软面试题:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
原文:http://blog.csdn.net/hhh3h/article/details/20835597