高级农民
- 积分
- 4612
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2013-11-24
- 最后登录
- 1970-1-1
|
- struct TreeNode {
- int val;
- TreeNode* left, * right;
- TreeNode(int v) : val(v), left(NULL), right(NULL) {};
- };
- class TreeIterator {
- public:
- TreeIterator(TreeNode* root, int k) : max_level(k) {
- if (root) stk.push(make_pair(0, root));
- }
-
- bool has_next() { return !stk.empty(); }
-
- int next() {
- if (stk.empty()) throw "out of range";
- int ret_val = stk.top().second->val;
- stk.pop();
- traverse();
- return ret_val;
- };
-
- virtual TreeNode* get_left (TreeNode *n)=0;
- virtual TreeNode* get_right(TreeNode *n)=0;
- protected:
- void traverse() {
- while (!stk.empty() && stk.top().first != max_level) {
- int next_level = stk.top().first+1;
- TreeNode* left = get_left (stk.top().second);
- TreeNode* right = get_right(stk.top().second);
- stk.pop();
- if (right) stk.push(make_pair(next_level, right));
- if (left) stk.push(make_pair(next_level, left ));
- }
- }
- stack<pair<int, TreeNode*>> stk;
- int max_level;
-
- };
- class TreeForwardIterator : public TreeIterator {
- public:
- TreeForwardIterator(TreeNode* root, int k) : TreeIterator(root, k) { traverse(); };
- TreeNode* get_left (TreeNode* n) { return n->left; };
- TreeNode* get_right(TreeNode* n) { return n->right; };
- };
- class TreeReverseIterator : public TreeIterator {
- public:
- TreeReverseIterator(TreeNode* root, int k) : TreeIterator(root, k) { traverse(); };
- TreeNode* get_left (TreeNode* n) { return n->right; };
- TreeNode* get_right(TreeNode* n) { return n->left; };
- };
- vector<int> tree_level_alt(TreeNode *root, int k) {
- TreeForwardIterator i_left (root, k);
- TreeReverseIterator i_right(root, k);
- vector<int> result;
-
- int l = INT_MIN, r = INT_MAX;
- while (l < r){
- l = i_left.has_next() ? i_left.next() : INT_MAX;
- r = i_right.has_next() ? i_right.next() : INT_MIN;
- if (l < r) { result.push_back(l); result.push_back(r);}
- else { if (l == r) result.push_back(l); }
- }
- return result;
- };
复制代码 |
|