leetCode #107 Binary Tree Level Order Traversal II

来源:互联网 发布:linux ps -ef|grep命令 编辑:程序博客网 时间:2024/05/29 10:08

题目:遍历二叉树,从下到上,从左到右

分析:这个跟之前的从上到下,从左到右的层序遍历是姊妹篇。

答案:

先回顾一下原先的层序遍历(把下层节点弄到队列里保存起来)

/** * 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>> levelOrder(TreeNode* root) {        vector<vector<int>> res;        queue<TreeNode*> thisq;        if (!root)            return res;        thisq.push(root);        do{            vector<int> thisline;            queue<TreeNode*> nextq;            while(!thisq.empty()){                thisline.push_back(thisq.front()->val);                if (thisq.front()->left)                    nextq.push(thisq.front()->left);                if (thisq.front()->right)                    nextq.push(thisq.front()->right);                thisq.pop();            }            res.push_back(thisline);            thisq = nextq;        }while(!thisq.empty());        return res;    }};

然后把vector反转一下:

/** * 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) {        vector<vector<int>> res;        vector<vector<int>> res_inv;        queue<TreeNode*> thisq;        if (!root)            return res;        thisq.push(root);        do{            vector<int> thisline;            queue<TreeNode*> nextq;            while(!thisq.empty()){                thisline.push_back(thisq.front()->val);                if (thisq.front()->left)                    nextq.push(thisq.front()->left);                if (thisq.front()->right)                    nextq.push(thisq.front()->right);                thisq.pop();            }            res.push_back(thisline);            thisq = nextq;        }while(!thisq.empty());                for (int i = 0; i< res.size(); i++){            res_inv.push_back(res[res.size() - i - 1]);        }        return res_inv;    }};

runtime: 16ms;


0 0
原创粉丝点击