110.平衡二叉树
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
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;int res = Math.max(leftHeight,rightHeight) + 1;return res;}
}
- 二叉树的所有路径
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<String> binaryTreePaths(TreeNode root) {List<String> res = new ArrayList<String>();if(root == null) return res;List<Integer> paths = new ArrayList<>();traversal(root,paths,res);return res;}public void traversal(TreeNode root,List<Integer> paths,List<String> res){paths.add(root.val);if(root.left == null && root.right == null){StringBuilder sb = new StringBuilder();for(int i = 0;i<paths.size()-1;i++){sb.append(paths.get(i)).append("->");}sb.append(paths.get(paths.size()-1));res.add(sb.toString());}if(root.left != null) {traversal(root.left,paths,res);paths.remove(paths.size()-1);}if(root.right != null) {traversal(root.right,paths,res);paths.remove(paths.size()-1);}}
}
404.左叶子之和
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {// public int sumOfLeftLeaves(TreeNode root) {// if(root == null) return 0;// if(root.left == null && root.right == null) return 0;// int leftNum = sumOfLeftLeaves(root.left);// if(root.left != null && root.left.left == null && root.left.right == null){// leftNum = root.left.val;// }// int rightNum = sumOfLeftLeaves(root.right);// return leftNum + rightNum;// }// public int sumOfLeftLeaves(TreeNode root) {// if(root == null) return 0;// Stack<TreeNode> stack = new Stack<>();// stack.push(root);// int res = 0;// while(!stack.isEmpty()){// TreeNode node = stack.pop();// if(node.left != null && node.left.left == null && node.left.right == null){// res += node.left.val;// }// if(node.left != null) stack.push(node.left);// if(node.right != null) stack.push(node.right);// }// return res;// }public int sumOfLeftLeaves(TreeNode root) {if(root == null) return 0;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);int res = 0;while(!queue.isEmpty()){int size = queue.size();while(size-- > 0){TreeNode node = queue.poll();if(node.left != null && node.left.left == null && node.left.right == null){res += node.left.val;}if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);}}return res;}
}