leetcode 102. Binary Tree Level Order Traversal
题目大意是按层输出节点的值。
主要考虑的是如何判断换层了
1,在最左边的节点做标记
2,使用递归层级就是标记
以下代码是左边节点做标记的
/**
* 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>> preResult;
vector<int> preResultTmp;
vector<int> vecTmp;
queue<TreeNode*> tmp;
TreeNode * rootTmp;
TreeNode * midTmp;
int start,end;
if(root == nullptr)
return preResult;
tmp.push(root);
preResultTmp.push_back(root -> val);
midTmp = root;
while(!tmp.empty()){
rootTmp = tmp.front();
tmp.pop();
if(rootTmp == midTmp){
if(rootTmp -> left != nullptr)
midTmp = rootTmp -> left;
else if(rootTmp -> right != nullptr)
midTmp = rootTmp -> right;
else{
midTmp = tmp.front();
continue;
}
preResult.push_back(preResultTmp);
preResultTmp = vecTmp;
}
if(rootTmp -> left != nullptr){
tmp.push(rootTmp -> left);
preResultTmp.push_back((rootTmp -> left) -> val);
}
if(rootTmp -> right != nullptr){
tmp.push(rootTmp -> right);
preResultTmp.push_back((rootTmp -> right) -> val);
}
}
preResult.push_back(preResultTmp);
return preResult;
};
};
以下代码是层级标记的
/**
* 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>> preResult;
vector<vector<int>> levelOrder(TreeNode* root) {
if(root == nullptr)
return preResult;
widthSearch(root,1);
return preResult;
};
void widthSearch(TreeNode* root,int level){
if(root == nullptr) return;
if(level > preResult.size())
preResult.push_back(vector<int>());
preResult[level-1].push_back(root -> val);
widthSearch(root -> left,level+1);
widthSearch(root -> right,level+1);
};
};

浙公网安备 33010602011771号