求二叉树的最大深度
-
递归法(深度优先)
int maxDepth(TreeNode* root) {
if(root==nullptr) return 0;
int l = maxDepth(root->left)+1;
int r = maxDepth(root->right)+1;
return l>r?l:r;
-
栈实现深度遍历找深度
int maxDepth(TreeNode* root) {
if(root==nullptr) return 0;
stack<pair<TreeNode*,int>> s; //储存每个节点及其对应的深度
TreeNode *p = root;
int maxdeep = 0;
int deep = 0;
while(!s.empty()||p!=nullptr)
//若栈非空,说明还有一些的节点的右子树未被探索
//若p非空,说明此节点还没进过栈。
{
while(p!=nullptr) //优先将所有左节点进栈
{
s.push(pair<TreeNode*,int>(p,deep++));
p = p->left;
}
p = s.top().first;
deep = s.top().second(); //deep为此时对应节点的深度。
if(maxdeep<deep)
maxdeep = deep;
s.pop();
p = p->right;
}
return maxdeep;
-
队列实现的层次遍历找深度
int maxDepth(TreeNode* root) {
if(root==nullptr) return 0;
deque<TreeNode*> q;
q.push_back(root);
int deep = 0;
while(!q.empty())
{
deep++;
int num = q.size();//num为每一层节点的数量
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;
}