题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
【分析】
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
求二叉树的深度。可以是递归的方法,属于DFS(深度优先搜索);
另一种方法是按照层次遍历,属于BFS(广度优先搜索)。
一、DFS——递归
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
int left=TreeDepth(pRoot->left);//左子树最大深度
int right=TreeDepth(pRoot->right);//右子树最大深度
return (left>right)?(left+1):(right+1);//比较二者取最大
}
};
二、BFS——层次遍历
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
/*BFS层序遍历:基于队列实现*/
if(pRoot==NULL)
return 0;
queue<TreeNode*> que;//创建队列
int depth = 0;
que.push(pRoot);//根节点先入队
while(!que.empty())//规则:某一节点出队时,其左右孩子节点入队
{
int size = que.size();//队列长度
depth++;
for(int i=0;i<size;i++)
{
TreeNode* node = que.front();//
que.pop();//队列首位弹出
if(node->left)
{
que.push(node->left);
}
if(node->right)
{
que.push(node->right);
}
}
}
return depth;
}
};