二叉树的深度
题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
解题思路
- 深度优先遍历:根节点的深度,等于根节点左右子树中深度大的那个+1。而左右子树的深度也等于其左右子树中深度大的那个,所以可以递归实现
- 广度优先遍历(层序遍历):设置一个变量记录层号,每遍历一层+1,用队列实现
深度优先遍历
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL) return 0;
int left=TreeDepth(pRoot->left);
int right=TreeDepth(pRoot->right);
return max(left,right)+1;
}
};
广度优先遍历(层序遍历)
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL) return 0;
int cnt=0;
queue<TreeNode *>q;
q.push(pRoot);
while(!q.empty()){
int len=q.size();
while(len--){
TreeNode *now=q.front();
q.pop();
if(now->left) q.push(now->left);
if(now->right) q.push(now->right);
}
cnt++;
}
return cnt;
}
};