【leetcode】Binary Tree Level Order Traversal

来源:互联网 发布:怎么看台湾网站知乎 编辑:程序博客网 时间:2024/06/05 01:21

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]

Accept: 11ms

#include <math.h>struct Pair {  int i;  TreeNode *node;};/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:  Solution() {    _result = new vector<vector<int> >;  }  ~Solution() {    delete _result;  }  vector<vector<int> > levelOrder(TreeNode *root) {    _result->clear();    if (root == NULL) {      return *_result;    }    Pair *p = new Pair;    p->i = 0;    p->node = root;    _que.push(p);    outputTree(*_result);    return *_result;  }protected:  void outputTree(vector<vector<int> > &result) {    if (_que.empty()) {      return;    }    Pair *p = _que.front();    _que.pop();        // output:    int level = p->i;    if (result.size() <= level) {      result.resize(level + 1);    }    result[level].push_back(p->node->val);    // handle children:    if (p->node->left) {      Pair *left = new Pair;      left->i = p->i + 1;      left->node = p->node->left;      _que.push(left);    }    if (p->node->right) {      Pair *right = new Pair;      right->i = p->i + 1;      right->node = p->node->right;      _que.push(right);    }    delete p;    outputTree(result);  }private:  queue<Pair*> _que;  vector<vector<int> > *_result;};


0 0
原创粉丝点击