递归
解题关键:
- 找出递归关系
- 找出终止条件
- 确定返回值
例子
- 给定一个二叉树,判断它是否是高度平衡的二叉树。
算法实现:
int deep(struct TreeNode *p)
{
//确定出口
if(p==NULL)
{
return 0;
}
//递归关系
int left=1+deep(p->left);
int right=1+deep(p->right);
//确定返回值
return left>right? left:right;
}
bool isBalanced(struct TreeNode* root)
{
//确定出口
if(root==NULL)return true;
int ch=abs(deep(root->left)-deep(root->right));
//递归关系+递归返回值(根据题目具体情况分析)
return ch<2 && isBalanced(root->left) && isBalanced(root->right);
}
- 给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
算法实现1:
int minDepth(struct TreeNode* root)
{
int left,right;
//终止条件
if(root==NULL)return 0;
if(root->left==NULL && root->right==NULL)return 1;
if(root->left)
{
left=minDepth(root->left);
}
if(root->right)
{
right=minDepth(root->right);
}
return left>right ? right+1 : left+1;
}
算法实现2(代码来源):
int minDepth(struct TreeNode* root){
//终止条件
if(root == NULL){
return 0;
}
//递归函数(递归关系)即正常情况下应该的行为
int left_length = minDepth(root->left) + 1;
int right_length = minDepth(root->right) + 1;
//返回值确定(重点)特殊情况的返回
if( root->left == NULL ){
return right_length;
}else if( root->right == NULL ){
return left_length;
}else if( left_length >= right_length ){
return right_length;
}else{
return left_length;
}
}
来源:CSDN
作者:Mark_404
链接:https://blog.csdn.net/zengwei1973/article/details/103833446