110.平衡二叉树
int getHight(TreeNode*root){
if(root == NULL) return true;
int left = getHight(root->left);
int right = getHight(root->right);
return 1 + max(left,right);
}
bool balance(TreeNode*root){
if(root == NULL) return true;
// 迭代判断左子树是否为平衡二叉树
bool leftside = balance(root->left);
// 迭代判断右子树是否为平衡二叉树
bool rightside = balance(root->right);
// 两树都是平衡二叉树返回 true
return leftside && rightside;
int left = getHight(root->left);
int right = getHight(root->right);
if(left - right <= 1) return true;
else return false;
}
bool isBalanced(TreeNode* root) {
return balance(root);
}
257. 二叉树的所有路径
class Solution {
private:
void Traversal(TreeNode* node,vector<int>& path,vector<string>& result){
// 中 最后一个节点也要加入到path中
path.push_back(node->val);
// 终止条件: 直到叶子节点 即 node的左右子叶都是NULL
if(node->left == NULL && node->right == NULL){
string sPath;
for(int i = 0;i < path.size() - 1; i++){
sPath += to_string(path[i]); // 强转string
sPath += "->";
}
sPath += to_string(path[path.size() - 1]); // 加入最后一个节点 后没有"->"
result.push_back(sPath);
return;
}
if(node->left){
Traversal(node->left,path,result); // 左
path.pop_back(); // 回溯
}
if(node->right){
Traversal(node->right,path,result); // 右
path.pop_back(); // 回溯
}
}
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<int> path;
vector<string> result;
if (root == NULL) return result;
Traversal(root, path, result);
return result;
}
};
404.左叶子之和
// 确定终止节点
if (root == NULL) return 0;
if (root->left == NULL && root->right== NULL) return 0;
// 确定单层递归逻辑
int leftLeaves = sumOfLeftLeaves(root->left); // 左
if (root->left && !root->left->left && !root->left->right) { // 左子树就是一个左叶子的情况
leftValue = root->left->val;
}
int rightValue = sumOfLeftLeaves(root->right); // 右
int sum = leftValue + rightValue; // 中
return sum;
需要强化记忆一下左子叶的判断方法,需要从子叶的父级开始判断