题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路有两种:
1. 递归
2. 非递归 层次遍历
代码如下:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
//方法一:递归
int get_treedepth_recursion(TreeNode* node){
if(NULL == node){
return 0;
}
int leftdepth = get_treedepth_recursion(node->left);
int rightdepth = get_treedepth_recursion(node->right);
return leftdepth > rightdepth ? leftdepth+1 : rightdepth+1;
}
//方法二:非递归 层次遍历 使用queue辅助
int get_treedepth_norecursion(TreeNode* node){
int depth = 0;
queue<TreeNode*> nodequeue;
if(node){
nodequeue.push(node);
}
while(!nodequeue.empty()){
depth++;
int size = nodequeue.size();
while(size){
TreeNode* temp = nodequeue.front();
nodequeue.pop();
size--;
if(temp->left){
nodequeue.push(temp->left);
}
if(temp->right){
nodequeue.push(temp->right);
}
}
}
return depth;
}
int TreeDepth(TreeNode* pRoot){
//return get_treedepth_recursion(pRoot);
return get_treedepth_norecursion(pRoot);
}
};