平衡二叉树
递归法
class Solution {
public:
int getHigt(TreeNode* root)
{
if(root == NULL) return 0;
int leftHigh = getHigt(root->left);
int rightHigt = getHigt(root->right);
if(leftHigh == -1 || rightHigt == -1) return -1;
if(abs(leftHigh - rightHigt) > 1) return -1;
return 1 + max(leftHigh, rightHigt);
}
bool isBalanced(TreeNode* root) {
return getHigt(root) == -1 ? 0 : 1;
}
};
二叉树的所有路径
递归法
要特别注意 回溯 发生在什么时候!
class Solution {
public:
void traversal(TreeNode* cre, string path, vector<string>& result)
{
path += to_string(cre->val);
if(cre->left == NULL && cre->right == NULL)
{
result.push_back(path);
return;
}
if(cre->left) traversal(cre->left, path + "->", result);
if(cre->right) traversal(cre->right, path + "->", result);
}
vector<string> binaryTreePaths(TreeNode* root) {
string path;
vector<string> result;
if(root == NULL) return result;
traversal(root, path, result);
return result;
}
};
左叶子之和
递归法
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if(root == NULL) return 0;
//if(root->right == NULL && root->left == NULL) return 0;
int leftLeaves = sumOfLeftLeaves(root->left);
if(root->left && !root->left->left && !root->left->right) leftLeaves = root->left->val;
int rightLeaves = sumOfLeftLeaves(root->right);
return leftLeaves + rightLeaves;
}
};