55 二叉树的深度
题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
测试序列
功能测试(输入普通的二叉树;二叉树的左右节点都没有左/右子树)
特殊输入测试(只有一个节点;空树)
解题思路
1)递归方法,取左右子树最大的深度+1。根节点也占一个深度(所以要加1)
//实现1
class Solution { public: int TreeDepth(TreeNode* pRoot) { if(pRoot==nullptr) return 0; if(pRoot->left==nullptr && pRoot->right==nullptr) //叶节点 return 1; return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1; } };
//实现2
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==nullptr)
return 0;
int nleft = TreeDepth( pRoot->left);
int nright = TreeDepth( pRoot->right);
return (nleft>nright)?(nleft+1):(nright+1);
}
};
2)非递归写法:层次遍历
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==nullptr)
return 0;
queue<TreeNode*> levelNodes;
levelNodes.push(pRoot);
int count=0;
while(!levelNodes.empty()){
int size=levelNodes.size();
while(size--){
TreeNode* temp = levelNodes.front();
levelNodes.pop();
if(temp->left!=nullptr)
levelNodes.push(temp->left);
if(temp->right!=nullptr)
levelNodes.push(temp->right);
}
count++;
}
return count;
}
};

浙公网安备 33010602011771号