110.平衡二叉树
class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
}
return judgeBalanced(root.left, root.right);
}
public boolean judgeBalanced(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
int lHeight = heightTree(left);
int rHeight = heightTree(right);
boolean lBalanced = true;
boolean rBalanced = true;
if (lHeight != 0) {
lBalanced = judgeBalanced(left.left, left.right);
}
if (rHeight != 0) {
rBalanced = judgeBalanced(right.left, right.right);
}
if (Math.abs(lHeight - rHeight) <= 1) {
return lBalanced && rBalanced;
} else {
return false;
}
}
public int heightTree(TreeNode node) {
if (node == null) {
return 0;
}
int leftHeight = heightTree(node.left);
int rightHeight = heightTree(node.right);
return Math.max(leftHeight, rightHeight) + 1;
}
}
257.二叉树的所有路径
class Solution {
List<String> list = new LinkedList<>();
Deque<String> queue = new LinkedList<>();
StringBuilder stringBuilder = new StringBuilder();
public List<String> binaryTreePaths(TreeNode root) {
if (root == null) {
String s = stringBuilder.toString();
if (!list.contains(s)) {
list.add(s);
}
return list;
}
if (stringBuilder.length() == 0) {
stringBuilder.append(((Integer) root.val).toString());
} else {
stringBuilder.append("->");
stringBuilder.append(((Integer) root.val).toString());
}
if (root.left != null && root.right != null || root.left == null && root.right == null) {
binaryTreePaths(root.left);
binaryTreePaths(root.right);
} else if (root.left == null && root.right != null) {
binaryTreePaths(root.right);
} else if (root.left != null && root.right == null) {
binaryTreePaths(root.left);
}
if (stringBuilder.lastIndexOf("->") < 0) {
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
} else {
int i = stringBuilder.lastIndexOf("->");
stringBuilder.delete(i, stringBuilder.length());
}
return list;
}
}
404.左叶子之和
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if (root == null) {
return 0;
}
if (root.left == null && root.right == null) {
return 0;
}
int leftSum = sumOfLeftLeaves(root.left);
if (root.left != null && root.left.left == null && root.left.right == null) {
leftSum = root.left.val;
}
int rightSum = sumOfLeftLeaves(root.right);
return leftSum + rightSum;
}
}