每日小细节新增算法好题合集,现在是初阶,每天会更新至少两道题目,感兴趣的小伙伴赶紧关注收藏不迷路哦
花费几分钟就能积累一种新的解题思路多是一件美事啊~
1.翻转二叉树
使用递归的方法就是分解成子问题,对于最小的单元,如果root==NULL直接返回递归,然后把left=root->left,right=root->right 记录下来,把root->left=right;root->right=left
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* invertTree(struct TreeNode* root){
if(root==NULL)
{
return NULL;
}
struct TreeNode*left=invertTree(root->left);
struct TreeNode*right=invertTree(root->right);
root->left=right;
root->right=left;
return root;
}
2.路径总和、
其实就是一条路走到底,可以用递归的方法,如果直接就是空树,返回false,如果是只有一个节点或者是递归到最后只有一个节点,就判断目标值和这个节点的val是否相等,相等返回true,然后就是递归左右子树,目标值对应减去经过的root,左右子树只要有一个符合就可以,所以是或
bool hasPathSum(struct TreeNode* root, int targetSum){
if(root==NULL)
{
return false;
}
if(root->left==NULL && root->right==NULL)
{
return targetSum==root->val;
}
return hasPathSum(root->left,targetSum-root->val) || hasPathSum(root->right,targetSum-root->val);
}