Day17——二叉树Ⅳ
目标:
● 110.平衡二叉树
● 257.二叉树的所有路径
● 404.左叶子之和
110.平衡二叉树
上一节
257.二叉树的所有路径
思路:回溯
终止条件:扫描到叶子节点。cur->left == nullptr && cur->right == nullptr
vector<string> res;
void traversal(TreeNode* node, string path) {
path += to_string(node->val);
if(node->left == nullptr && node->right == nullptr) {
res.push_back(path);
return;
}
if(node->left != nullptr) {
traversal(node->left, path+"->");
}
if(node->right != nullptr) {
traversal(node->right, path+"->");
}
return;
}
vector<string> binaryTreePaths(TreeNode* root) {
string path = "";
res = {};
if(root == nullptr) return res;
traversal(node, path);
return res;
}
404. 左叶子之和
思路:
寻找左叶子:cur->left != nullptr && cur->left->left == nullptr && cur->left->right == nullptr
递归结束条件: 找到左叶子
int sum;
void order(TreeNode* node) {
if(node != nullptr && node->left != nullptr && node->left->left == nullptr && node->left->right == nullptr) {
sum += node->left->val;
}
if(node != nullptr) {
order(node->left);
order(node->right);
}
return;
}
int sumOfLeftLeaves(TreeNode* root) {
sum = 0;
order(root);
return sum;
}