文档讲解:代码随想录 (programmercarl.com)
视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com)
LeetCode 平衡二叉树
题目链接:110. 平衡二叉树 - 力扣(LeetCode)
解题思路:参考求高度的递归解法
代码如下:
class Solution {
public:
int height(TreeNode* root){
if(!root)return 0;
int left=height(root->left);
if(left==-1)return -1;
int right=height(root->right);
if(right==-1)return -1;
return abs(left-right)>1?-1:1+max(left,right);
}
bool isBalanced(TreeNode* root) {
return height(root)==-1?false:true;
}
};
LeetCode 二叉树的所有路径
题目链接:257. 二叉树的所有路径 - 力扣(LeetCode)
解题思路:利用回溯的思想。
解题代码如下(下面代码来自代码随想录 (programmercarl.com)):
class Solution {
public:
void paths(TreeNode*root,vector<string> &res,string path){
path+=to_string(root->val);
if(!root->left&&!root->right){
res.push_back(path);
return;
}
if(root->left)paths(root->left,res,path+"->");
if(root->right)paths(root->right,res,path+"->");
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string>res;
string path;
paths(root,res,path);
return res;
}
};
LeetCode 左叶子之和
题目链接:404. 左叶子之和 - 力扣(LeetCode)
解题思路:先根遍历即可。
解题代码如下:
class Solution {
public:
void sumleft(TreeNode* root,int &res){
if(!root)return;
if(root->left&&!root->left->left&&!root->left->right){
res+=root->left->val;
}
sumleft(root->left,res);
sumleft(root->right,res);
}
int sumOfLeftLeaves(TreeNode* root) {
int res=0;
sumleft(root,res);
return res;
}
};