L110.平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/
本题应先理解什么是平衡二叉树,每个叶子节点的左子树与右子树的高度之差不大于一
运用递归三部曲,其实也就是时刻判断,每个叶子节点的左子树与右子树的高度之差,若大于1则返回false,若不大,则返回则准确高度,以便根节点的进行一个求解。
1、返回类型,用-1代表false,用实际深度代表true
2、终止条件,遇到空就返回null。
3、循环体,在每个根节点传入时,判断左子树与右子树的的返回值,若为-1,则立刻跳出循环,若不是,则继续
class Solution {
public:
int getdepth(TreeNode* root)
{
//采用后序遍历方式
if (root == NULL)return 0;
int leftdepth = getdepth(root->left);
if (leftdepth == -1)return -1;
int rightdepth = getdepth(root->right);
if (rightdepth == -1)return -1;
int result = 1 + max(leftdepth, rightdepth);
if (abs(leftdepth - rightdepth) > 1)
return -1;
else
return result;
}
bool isBalanced(TreeNode* root) {
return getdepth(root)==-1?false:true;
}
};
L257. 二叉树的所有路径257. 二叉树的所有路径 - 力扣(LeetCode)
本题返回所有路径之和,自己一开始未搞清二叉树的前中后三种遍历方式,导致一直犯迷糊
本题的思路,看卡哥的是用到了回溯,因为是从第一个根节点,来返回所有的路径,所以在这使用前序遍历,当遍历到最后一个叶子节点时,条件判断为左右孩子节点都为空,这样就将其加入其中。
若不为空,path就加一个"->”,并开始新一轮递归,直到找到叶子节点,找到之后,因为在这并没有采用引用的方式进行引用标量,故传入的path值时一个局部变量,并不会改变上一级的值,虽然在本轮函数中已经加了一个value值,但在上一轮中末端还是“->”。
class Solution {
public:
//本题应该采用前序遍历方式,中左右,采用递归方式
void recursion(vector<string>& result, TreeNode* root,string path)
{
path += to_string(root->val);
if (root->left == NULL && root->right == NULL)
{
result.push_back(path);
return;
}
if (root->left)//若不为空,则加->
{
path += "->";
recursion(result, root->left, path);//一直忘下面寻找,找到返回为空,就将->第一个的弹出
path.pop_back();
path.pop_back();
}
if (root->right)//若不为空,则加->
{
path += "->";
recursion(result, root->right, path);
path.pop_back();
path.pop_back();
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string>result;
string path;
if (root == NULL)return result;
recursion(result, root, path);
return result;
}
};
L404.左叶子之和 404. 左叶子之和 - 力扣(LeetCode)
本题给自己的体会就是多动手写
class Solution {
public:
void getleftsum(TreeNode* root, int &sum)
{
if (root == NULL)return;
if (root->left != NULL && (root->left->left == NULL && root->left->right == NULL))
{
sum += root->left->val;
}
getleftsum(root->left, sum);
getleftsum(root->right, sum);
}
int sumOfLeftLeaves(TreeNode* root) {
int sum=0;
getleftsum(root, sum);
return sum;
}
};