题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
分析:可以用递归,也可以用非递归,有两种想法,一种是深度优先遍历,用递归就可以,还有一种是层序遍历,用队列实现。
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int res=0,maxres=0;
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
res++;
TreeDepth(pRoot->left);
TreeDepth(pRoot->right);
if(res>maxres)
maxres=res;
res--;
return maxres;
}
};
其实递归的代码有比这个还有简单的多的版本:
链接:https://www.nowcoder.com/questionTerminal/435fb86331474282a3499955f0a41e8b
来源:牛客网
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){
return
pRoot ? max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1 :0;
}
};
//迭代版本
class
Solution {
public
:
int
TreeDepth(TreeNode* pRoot) {
if
(!pRoot)
return
0;
queue<TreeNode*> que;
que.push(pRoot);
int
depth=0;
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;
}
};