总结:求解二叉树的深度可以使用递归的方法去求解。被调用函数和主调函数的通信方式可以考虑通过参数的引用,以及通过返回值的方式。如果被调用函数和主调函数需要同时进行多个参数的通信。那么,只能同时传参数的引用以及使用返回值的方式。
求解二叉树的深度,可以使用参数引用法,以及使用返回值法.
1、使用参数引用法
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
int depth = 0;
Depth(pRoot,depth);
return depth;
}
private:
void Depth(TreeNode* pRoot,int& depth){
//如果是空树
if(pRoot==NULL){
depth = 0;
return;
}
int left,right;
Depth(pRoot->left,left);
Depth(pRoot->right,right);
depth = (left>right)?left+1:right+1;
}
};
2、使用返回值法
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
int depth = 0;
if(pRoot==NULL) return depth;
int leftDepth = TreeDepth(pRoot->left);
int rightDepth = TreeDepth(pRoot->right);
depth = leftDepth>rightDepth? leftDepth+1:rightDepth+1;
return depth;
}
};
3、需要判断一棵树是否为平衡二叉树,需要通过传引用和传返回值的方式
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth = 0;
return IsBalanced(pRoot,depth);
}
private:
//判断以pRoot为根的树是否为平衡二叉树,并且返回depth
bool IsBalanced(TreeNode* pRoot,int& depth){
if(pRoot==NULL){
depth = 0;
return true;
}
int left,right;
if(IsBalanced(pRoot->left,left)&&IsBalanced(pRoot->right,right)){
int diff = left-right;
//满足平衡二叉树的定义
if(diff<=1 && diff>=-1){
depth = (left < right)?(left+1):(right+1);
return true;
}
}
return false;
}
};