平衡二叉树
int traversal(TreeNode* cur, int depth)
{
if (!cur)
return depth;
int left_depth = traversal(cur->left, depth + 1);
int right_depth = traversal(cur->right, depth + 1);
if (left_depth == -1 || right_depth == -1)
return -1;
if (left_depth > right_depth + 1 || left_depth < right_depth - 1)
return -1;
return max(left_depth, right_depth);
}
bool isBalanced(TreeNode* root) {
if (root == nullptr)
return true;
int result = traversal(root, 1);
return result == -1 ? false : true;
}
二叉树的所有路径
class Solution {
public:
vector<string> ret;
void traversal(TreeNode* cur, string s)
{
if (!cur->left && !cur->right)
{
ret.emplace_back(s);
return;
}
string tmp = s;
if (cur->left)
{
traversal(cur->left, s.append("->" + to_string(cur->left->val)));
}
s = tmp;
if (cur->right)
{
traversal(cur->right, s.append("->" + to_string(cur->right->val)));
}
return;
}
vector<string> binaryTreePaths(TreeNode* root) {
if (root == nullptr)
return ret;
string start = to_string(root->val);
traversal(root, start);
return ret;
}
};
左叶子之和
class Solution {
public:
int ret;
void traversal(TreeNode* cur, bool isLeft)
{
if (!cur)
return;
if (isLeft && !cur->left && !cur->right)
{
ret += cur->val;
return;
}
traversal(cur->left, true);
traversal(cur->right, false);
return;
}
int sumOfLeftLeaves(TreeNode* root) {
if (root == nullptr)
return 0;
traversal(root, false);
return ret;
}
};