基础知识
递归就是自己调用自己
过程分为递和归,一般需要设置一个结束递的条件然后才能让它回归
//n阶乘
int f(n)
{
//结束条件
if(n==1)
return 1;
return n*f(n-1);
}
本章题目有许多涉及二叉树相关的递归
将数字变成0的操作次数
1342. 将数字变成 0 的操作次数 - 力扣(LeetCode)
方法一:递归
//递归
int fac(int num)
{
if(num == 0)//结束条件
return 0;
if(num % 2 ==1)
return fac(num-1) + 1;
else
return fac(num/2) + 1;
}
int numberOfSteps(int num) {
int res = fac(num);
return res;
}
方法二:循环
//循环
int numberOfSteps(int num) {
int count = 0;
while(num != 0)
{
if(num%2 == 0)
num /= 2;
else if(num%2 == 1)
num -= 1;
count++;
}
return count;
}
完全二叉树的节点个数
222. 完全二叉树的节点个数 - 力扣(LeetCode)
int countNodes(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
return countNodes(root->left) + countNodes(root->right) + 1;
}
二叉搜索树的范围和
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int rangeSumBST(struct TreeNode* root, int low, int high) {
if(root == NULL)
return 0;
else if(root->val < low)//右子树更大,进一步从右子树判断是否在范围内
return rangeSumBST(root->right,low,high);
else if(root->val > high)//左子树更小,进一步从左子树判断
return rangeSumBST(root->left,low,high);
return root->val + rangeSumBST(root->left,low,high) + rangeSumBST(root->right,low,high);
}