Leetcode 203:
https://leetcode.com/problems/balanced-binary-tree/
题目的第一想法:
这道题的本质是判断左右树的高度,从而得知一个树是否平衡。于是可以写一个得到树左右最大高度的fucntion来判断是否有不平衡的情况存在。如果有就更改一个boolean global varible的值,最后返回。
class Solution {
boolean judge = true;
public boolean isBalanced(TreeNode root) {
maxDepth(root);
return judge;
}
public int maxDepth(TreeNode root){
if(root == null){
return 0;
}
int left = maxDepth(root.left);
int right = maxDepth(root.right);
if(Math.abs(left - right) > 1){
judge = false;
}
return 1 + Math.max(left, right);
}
}
Leetcode 203:
https://leetcode.com/problems/balanced-binary-tree/
题目的第一想法:
是做一个任意顺序的遍历,在走过每一个点的时候记录下当前的数值,当找到一个leaf的时候加入表里。然后如此循环往复找到所有的path。
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> rlist = new LinkedList<>();
binaryTreePaths(root, rlist, "");
return rlist;
}
public void binaryTreePaths(TreeNode root, List<String> list, String str){
if(root == null){
return;
}else if(root.left == null && root.right == null){
str += String.valueOf(root.val);
list.add(str);
}else{
str += String.valueOf(root.val) + "->";
binaryTreePaths(root.left, list, str);
binaryTreePaths(root.right, list, str);
}
}
}
Leetcode 404:
https://leetcode.com/problems/sum-of-left-leaves/
题目的第一想法:
这道题依旧是遍历,然后再加一个是否为左叶的判断就好。有些容易出错的点在于无论如何还是需要加一个null的条件以防万一。
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
return sumOfLeftLeaves(root, false);
}
public int sumOfLeftLeaves(TreeNode root, boolean l) {
if(root == null || (root.left == null && root.right == null && !l)){
return 0;
}else if(root.left == null && root.right == null && l){
return root.val;
}
return sumOfLeftLeaves(root.left, true) + sumOfLeftLeaves(root.right, false);
}
}