// 深度优先:递归intmaxDepth(TreeNode* root){if(!root)return0;return1+max(maxDepth(root->left),maxDepth(root->right));}// 深度优先:用栈的循环版intmaxDepth(TreeNode* root){if(!root)return0;
stack<pair<TreeNode*,int>> s;
TreeNode* p = root;int maxdeep =0;int deep =0;while(!s.empty()|| p !=NULL){while(p !=NULL){
s.push(pair<TreeNode*,int>(p,++deep));
p = p->left;}
p = s.top().first;
deep = s.top().second;if(maxdeep < deep)
maxdeep = deep;
s.pop();
p = p->right;}return maxdeep;}// 广度优先:使用队列intmaxDepth(TreeNode* root){if(!root)return0;
deque<TreeNode*> q;
q.push_back(root);int deep =0;while(!q.empty()){++deep;int num = q.size();for(int i =1; i <=num;++i){
TreeNode* p = q.front();
q.pop_front();if(p->left)
q.push_back(p->left);if(p->right)
q.push_back(p->right);}}return deep;}
二叉树的最小深度的代码
intminDepth(TreeNode* root){if(!root)return0;int deep =0;
deque<TreeNode*> q;
q.push_back(root);while(!q.empty()){++deep;int num = q.size();for(int i =1; i <= num;++i){
TreeNode* p = q.front();
q.pop_front();if(!p->left &&!p->right)return deep;if(p->left)
q.push_back(p->left);if(p->right)
q.push_back(p->right);}}return deep;}