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); }; };