标签:leetcode binary tree level or
广度遍历二叉树,且要分别记录每一层的数据,方法有二。
1.迭代法
设置两个队列,其中一个队列用于存放上一层的节点,另一个队列用于存放下一层的节点。轮番使用。
class Solution { public: vector<vector<int> > levelOrder(TreeNode *root) { queue<TreeNode *> q1,q2; vector<vector<int>> result; if(!root) return result; vector<int> path; q1.push(root); while(!q1.empty()||!q2.empty()) { path.clear(); while(!q1.empty()) { TreeNode *node=q1.front(); path.push_back(node->val); if(node->left) q2.push(node->left); if(node->right) q2.push(node->right); q1.pop(); } if(!path.empty()) result.push_back(path); path.clear(); while(!q2.empty()) { TreeNode *node=q2.front(); path.push_back(node->val); if(node->left) q1.push(node->left); if(node->right) q1.push(node->right); q2.pop(); } if(!path.empty()) result.push_back(path); } return result; } };2.递归法(来源于网上)
class Solution { public: vector<vector<int> > levelOrder(TreeNode *root) { vector<vector<int>> result; traverse(root,1,result); return result; } private: void traverse(TreeNode *root,int level,vector<vector<int>> &result) { if(!root) return; if(level>result.size()) result.push_back(vector<int>()); result[level-1].push_back(root->val); traverse(root->left,level+1,result); traverse(root->right,level+1,result); } };
Leetcode_Binary Tree Level Order Traversal
标签:leetcode binary tree level or
原文地址:http://blog.csdn.net/yinqiaohua/article/details/43671067