深度优先搜索--非递归
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
//dfs
int maxDepth(TreeNode* root) {
// write code here
return dfs(root); //100%
}
int dfs(TreeNode* root) {
if (!root) return 0;
map<TreeNode*, bool> m;
stack<TreeNode*> s;
s.push(root);
m[root] = true;
int max = s.size();
while (!s.empty()) {
TreeNode* cur = s.top();
if (cur->left && m.find(cur->left) == m.end()) {
s.push(cur->left);
m[cur->left] = true;
continue;
}
if (cur->right && m.find(cur->right) == m.end()) {
s.push(cur->right);
m[cur->right] = true;
continue;
}
//回溯
max = s.size() > max ? s.size() : max;
do {
s.pop();
cur = s.top();
} while (!s.empty() &&
m.find(cur->left) != m.end() &&
m.find(cur->right) != m.end());
}
return max;
}
};广度优先搜索--非递归
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
//dfs
int maxDepth(TreeNode* root) {
// write code here
return bfs(root); //100%
}
int bfs(TreeNode* root){
if (!root) return 0;
queue<TreeNode*> q;
q.push(root);
int count = 0;
while(!q.empty()){
int sz = q.size();
for(int i=0; i<sz; ++i){
TreeNode* cur = q.front();
q.pop();
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
count++;
}
return count;
}
};
京公网安备 11010502036488号