
摘要:二叉树的层次遍历。
Problem:
二叉树的层次遍历。不同的是返回结果要分层,每层的值为一个vector。
解法一:递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
class { private: vector<vector<int>> ans;
public: vector<vector<int>> levelOrder(TreeNode* root) { levelOrder2(root, 0); return ans; } void levelOrder2(TreeNode* root, int level){ if(!root) return; if(ans.size() == level) ans.push_back({}); ans[level].push_back(root -> val); levelOrder2(root -> left, level+1); levelOrder2(root -> right, level+1); } };
|
解法二:非递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class { public: vector<vector<int>> levelOrder(TreeNode* root) { if(!root) return {}; vector< vector<int> > ans; queue <TreeNode*> q; q.push(root); while(!q.empty()){ vector<int> tmp; int len = q.size(); for(int i=0; i<len; i++){ TreeNode* node = q.front(); q.pop(); tmp.push_back(node -> val); if(node -> left) q.push(node -> left); if(node -> right) q.push(node -> right); } ans.push_back(tmp); } return ans; } };
|
近期评论