class Solution {
//通过标记二叉树的高度
public boolean isBalanced(TreeNode root) {
return getHeight(root) != -1;
}
public int getHeight(TreeNode root){
if(root == null){
return 0;
}
int leftHeight = getHeight(root.left);
if(leftHeight == -1){
return -1;
}
int rightHeight = getHeight(root.right);
if(rightHeight == -1){
return -1;
}
if(Math.abs(leftHeight-rightHeight) > 1){
return -1;
}
return Math.max(leftHeight, rightHeight) + 1;
}
}
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res = new ArrayList<>();
if(root == null){
return res;
}
List<Integer> path = new ArrayList<>();
getTreePaths(root, res, path);
return res;
}
public void getTreePaths(TreeNode root, List<String> res, List<Integer> path){
//前序遍历将中节点加入到路径中
path.add(root.val);
if(root.left == null && root.right == null){
StringBuilder string = new StringBuilder();
for(int i = 0; i < path.size() - 1; i++){
string.append(path.get(i)).append("->");
}
string.append(path.get(path.size()-1));
res.add(string.toString());
return;
}
if(root.left != null){
getTreePaths(root.left, res, path);
path.remove(path.size()-1);
}
if(root.right != null){
getTreePaths(root.right, res, path);
path.remove(path.size()-1);
}
}
}
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if (root == null) return 0;
int leftValue = sumOfLeftLeaves(root.left); // 左
int rightValue = sumOfLeftLeaves(root.right); // 右
if (root.left != null && root.left.left == null && root.left.right == null) {
leftValue = root.left.val;
}
int sum = leftValue + rightValue; // 中
return sum;
}
}