今天在leetcode中碰到了求二叉树的深度问题,于是总结一下这两种方法
- 方法一是用递归的方法,方法二是借助队列和层序遍历的思想
#include<iostream>
#include<queue>
using namespace std;
//构建二叉树
struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
//方法一:判断树不为空就一直遍历下去
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
if(!pRoot) return 0 ;
return max(1+TreeDepth(pRoot->left), 1+TreeDepth(pRoot->right));
}
};
//方法二:利用层序遍历的思想,每一层都弹出队列,深度才加一
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{ if(pRoot==NULL)return 0;
int depth=0;
TreeNode* p1=pRoot;
TreeNode* front;
queue<TreeNode*> q1;
q1.push(p1);
while(!q1.empty())
{
depth++;
int size1=q1.size();
int count=0;
//每次弹出所有的队列元素,然后让深度加一//
while(count<size1)
{
front=q1.front();
q1.pop();
count++;
if(front->left!=NULL)
{
q1.push(front->left);
}
if(front->right!=NULL)
{
q1.push(front->right);
}
}
}
return depth;
}
};