Day17 二叉树part03
我的思路:
返回 -1,表示当前子树不是平衡树。这样可以提前终止对右子树高度的计算,节省计算时间,因为只要发现一个子树不是平衡树,整棵树就不可能是平衡树了。
解答:
class Solution {
public boolean isBalanced(TreeNode root) {
int res = getHeight(root);
if(res != -1) {
return true;
}
else {
return false;
}
}
public int getHeight(TreeNode root) {
if(root == null) {
return 0;
}
int left = getHeight(root.left);
if(left == -1) {
return -1;
}
int right = getHeight(root.right);
if(right == -1) {
return -1;
}
if(Math.abs(left - right) > 1) {
return -1;
}
return Math.max(left, right) + 1;
}
}
我的思路:
当结点为叶子结点时,添加路径。否则进行递归,注意要用new StringBuffer(sB)使得每次迭代都有独立的地址
解答:
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res = new ArrayList();
if(root != null) {
StringBuffer sb = new StringBuffer();
findPath(root, sb, res);
}
return res;
}
public void findPath(TreeNode root, StringBuffer sB, List<String> res) {
if(root != null) {
sB.append(root.val);
if(root.left == null && root.right == null) {
res.add(sB.toString());
}
else {
sB.append("->");
findPath(root.left, new StringBuffer(sB), res);
findPath(root.right, new StringBuffer(sB), res);
}
}
}
}
我的思路:
利用isLeft判断是左节点还是右节点
解答:
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root == null) {
return 0;
}
return dfs(root.left, true) + dfs(root.right, false);
}
public int dfs(TreeNode node, boolean isLeft) {
if(node == null) {
return 0;
}
if(isLeft && node.left == null && node.right == null) {
return node.val;
}
return dfs(node.left, true) + dfs(node.right, false);
}
}