Binary Tree Level Order Traversal II

来源:互联网 发布:sql server 自增列 编辑:程序博客网 时间:2024/04/29 17:03

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]]
点击打开原题链接

跟从上往下层次遍历一样,最后把结果倒置一下就可以了~~


struct node { TreeNode* tn; int level; };class Solution {public:vector<vector<int> > levelOrderBottom(TreeNode *root) {vector<vector<int> > vvi;vector<int> vi;deque<node> di;node nd;int level = 0;if (root == NULL){return vvi;}nd.level = 0;nd.tn = root;di.push_back(nd);node left,right;while (!di.empty()) {nd = di.front();if (nd.tn->left != NULL){left.tn = nd.tn->left;left.level = nd.level+1;di.push_back(left);}if (nd.tn->right != NULL){right.tn = nd.tn->right;right.level = nd.level + 1;di.push_back(right);}// if (vi.empty())// {// vi.push_back(nd.tn->val);// level++;// di.pop_front();// }// else // {nd = di.front();if (nd.level == level){vi.push_back(nd.tn->val);di.pop_front();}else{vvi.push_back(vi);vi.clear();vi.push_back(nd.tn->val);level++;di.pop_front();}//}}vvi.push_back(vi);return vector<vector<int> >(vvi.rbegin(),vvi.rend());}};


1 0