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两个中间变量,大大减少了递归调用的次数,所以当我们在使用递归运算时尽量使用中间变量,而且此中间变量必须在递归运算中调用