Day 17 二叉树
计算左右两棵子树的高度,如果有一个高度是-1(有一棵子树不平衡),直接返回-1,否则计算高度差,判断是否不平衡
110. 平衡二叉树
class Solution {
int helper(TreeNode *root)
{
if (!root) return 0;
int leftDepth = helper(root->left);
int rightDepth = helper(root->right);
if (leftDepth == -1 || rightDepth == -1) return -1;
else if (abs(leftDepth - rightDepth) > 1)
{
return -1;
}
else
{
return max(leftDepth, rightDepth) + 1;
}
}
public:
bool isBalanced(TreeNode* root) {
return helper(root) != -1;
}
};
257. 二叉树的所有路径
使用回溯的方法,每次处理一个节点之前要把它push进table里,处理完之后又要把它pop出来文章来源:https://www.toymoban.com/news/detail-556080.html
class Solution {
vector<string> rst;
vector<int> table;
void backtracking(TreeNode *root)
{
if (!root) return;
table.push_back(root->val);
if (!root->left && !root->right) // 如果到达一个叶子节点
{
if (!table.empty())
{
string path;
for (int i = 0; i < table.size(); ++i)
{
if (i > 0)
{
path += "->";
}
path += to_string(table[i]);
}
rst.push_back(path);
}
}
else // 如果不是叶子节点
{
// 继续处理子节点
backtracking(root->left);
backtracking(root->right);
}
table.pop_back();
}
public:
vector<string> binaryTreePaths(TreeNode* root) {
rst.clear();
table.clear();
backtracking(root);
return rst;
}
};
404. 左叶子之和
处理一个节点时,要判断它是否是左节点(需要父节点,可以通过函数传递),同时还要判断是否是叶子节点(需要节点本身)文章来源地址https://www.toymoban.com/news/detail-556080.html
class Solution {
int sum;
void helper(TreeNode *root, bool isLeft)
{
if (!root) return;
if (!root->left && !root->right) // 如果是叶子节点
{
if (isLeft) // 如果是左节点
{
sum += root->val;
}
// else // 如果是右节点的话,不用作处理
return;
}
if (root->left) helper(root->left, true);
if (root->right) helper(root->right, false);
}
public:
int sumOfLeftLeaves(TreeNode* root) {
sum = 0;
helper(root, false);
return sum;
}
};
到了这里,关于算法刷题Day 17 平衡二叉树+二叉树的所有路径+左叶子之和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!