leetcode || 107、Binary Tree Level Order Traversal II

来源:互联网 发布:温州平阳网络问政平台 编辑:程序博客网 时间:2024/05/20 19:16

problem:

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

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

    3   / \  9  20    /  \   15   7

return its bottom-up level order traversal as:

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

Hide Tags
 Tree Breadth-first Search
题意:层序遍历二叉树,从最后一层往上开始按层输出

thinking:

和普通的二叉树层序遍历原理一样,借助queue实现,先得到从上到下的层序遍历结果,再借助stack翻转一下结果即可

code:

class Solution {  private:      vector<vector<int> > ret;      stack<vector<int> > _stack;  public:      vector<vector<int> > levelOrderBottom(TreeNode *root) {          ret.clear();          if(root==NULL)              return ret;          queue<TreeNode *> tmp_queue;          tmp_queue.push(root);          level_order(tmp_queue);          while(!_stack.empty())          {              vector<int> tmp=_stack.top();              ret.push_back(tmp);              _stack.pop();          }          return ret;      }      void level_order(queue<TreeNode *> queue1)      {          if(queue1.empty())              return;          vector<int> array;          queue<TreeNode *> queue2;          while(!queue1.empty())          {              TreeNode *tmp=queue1.front();              array.push_back(tmp->val);              queue1.pop();              if(tmp->left!=NULL)                  queue2.push(tmp->left);              if(tmp->right!=NULL)                  queue2.push(tmp->right);          }          _stack.push(array);          level_order(queue2);      }  };


0 0
原创粉丝点击