LeetCode *** 107. Binary Tree Level Order Traversal II

来源:互联网 发布:原油外盘软件 编辑:程序博客网 时间:2024/06/05 16:51

题目:

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]]


分析:

用广度优先维护两个vector即可。一开始我不是很懂vecrtot<vector<int>>该怎么返回,还有输出的时候应该把res翻转一遍。这两个都是新学到的东西。c++确实好久没用过了,忘的差不多了。。。


代码:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int>> levelOrderBottom(TreeNode* root) {                queue<TreeNode*> tree;        queue<int> level;                if(root!=NULL){            level.push(0);            tree.push(root);        }                vector<vector<int>> res;        vector<int> medianRes;                while(!tree.empty()&&!level.empty()){                        TreeNode* tmp=tree.front();            int levelNow=level.front();            tree.pop();            level.pop();                        medianRes.push_back(tmp->val);                        if(level.empty()||level.front()!=levelNow){                res.push_back(medianRes);                medianRes.erase(medianRes.begin(),medianRes.end());            }                        if(tmp->left){                tree.push(tmp->left);                level.push(levelNow+1);            }            if(tmp->right){                tree.push(tmp->right);                level.push(levelNow+1);            }                    }        reverse(res.begin(),res.end());                return res;    }};

0 0
原创粉丝点击