二叉树的简单递归求解

 int size = 0;
void btreesize(BTNode* point)//节点数
{
    
    if (point == NULL)
    {
        return;
}
    else
    {
        size++;
    }
    btreesize(point->left);
    btreesize(point->right);
 
}

求树的节点数,递归思路为首先创立一个全局变量避免其在函数内部成为局部变量,然后当走到空树的时候返回,其余情况次数加一,然后进行递归调用

int btreeleavesize(BTNode* point)
{
    if(point==NULL)
        {
        return 0;
        }
    if (point->left == point->right&&point->left==NULL)
    {
        return 1;
    }
    return btreeleavesize(point->left) + btreeleavesize(point->right);
}

求树的叶子数,当左右节点相等且为空时为叶子节点,这里是递归调用的第二种方法:如果没有变量改变则要在每一种情况下都进行return 

int treeheight(BTNode* point)
{
    if (point == NULL)
    {
        return 0;
    }
    int left = treeheight(point->left);
    int right = treeheight(point->right);
        return left > right ? left + 1 : right + 1;
}

求树的高度:思路为找到左右节点的最大节点再加一,而找左右节点时进行递归操作进行比较,而这里运用了left和right两个中间变量,大大减少了递归调用的次数,所以当我们在使用递归运算时尽量使用中间变量,而且此中间变量必须在递归运算中调用

你可能感兴趣的:(数据结构,算法,开发语言)