leetcode 110 判断是否 平衡二叉树
递归法实现
public static boolean isBalanced(TreeNode root){
if(root==null)
return true;
return subDepth(root)!=-1;
}
private static int subDepth(TreeNode root) {
if(root==null) return 0;
int left = subDepth(root.left);
if(left==-1)
return -1;
int right = subDepth(root.right);
if(right==-1)
return -1;
if(Math.abs(left-right)>1){
return -1;// 假设 已判断子树非平衡二叉树,统一返回-1,替代高度值
}
return Math.max(left,right)+1;
}
leetcode 257 二叉树的所有路径
public static List<String> binaryTreePaths(TreeNode root){
//递归前序 父节点→子节点
List<String> result = new ArrayList<>();
if(root==null) return result;
if(root.left==null && root.right==null) {
result.add(String.valueOf(root.val));
return result;
}
List<String> left = binaryTreePaths(root.left);
List<String> right = binaryTreePaths(root.right);
String tmp="";
for (int i = 0; i < left.size(); i++) {
tmp = root.val + "->" + left.get(i);
result.add(tmp);
}
for (int i = 0; i < right.size(); i++) {
tmp = root.val + "->" + right.get(i);
result.add(tmp);
}
/* if (root.left != null) {
if (left.size() == 0) {
tmp = root.val + "->" + root.left.val;
result.add(tmp);
} else {
for (int i = 0; i < left.size(); i++) {
tmp = root.val + "->" + left.get(i);
result.add(tmp);
}
}
}*/
/* if (root.right != null) {
if (right.size() == 0) {
tmp = root.val + "->" + root.right.val;
result.add(tmp);
} else {
for (int i = 0; i < right.size(); i++) {
tmp = root.val + "->" + right.get(i);
result.add(tmp);
}
}
}*/
return result;
}
leetcode 404 左叶子节点之和
public static int sumOfLeftLeaves(TreeNode root){
int res=0;
if(root==null) return 0;
int left = subSum(root.left,true);
int right = subSum(root.right,false);
res = left + right;
return res;
}
public static int subSum(TreeNode root, boolean isLeft){
if(root == null) return 0;
if(isLeft && root.left==null && root.right==null)
return root.val;
int left = subSum(root.left,true);
int right = subSum(root.right,false);
return left + right;//后序
}