目录
110. Balanced Binary Tree
题目链接:https://leetcode.cn/problems/balanced-binary-tree/
/**
* 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) {
if (root == null) return true;
return getHeght(root) == -1 ? false : true;
}
public int getHeght(TreeNode node){
if (node == null) return 0;
int l = getHeght(node.left);
if (l == -1) return -1;
int r = getHeght(node.right);
if (r == -1) return -1;
else return Math.abs(l - r) > 1 ? -1 : 1 + Math.max(l, r);
}
}
257. Binary Tree Paths
题目链接:https://leetcode.cn/problems/binary-tree-paths/
方法一 迭代
1 方法思想
2 代码实现
/**
* 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> ans = new ArrayList<>();
if (root == null) return ans;
Stack<TreeNode> stack = new Stack<>();
Stack<String> path = new Stack<>();
stack.push(root);
path.push(String.valueOf(root.val));
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
String pathTemp = path.pop();
if (node.right == null && node.left == null) {
ans.add(pathTemp);
}
if (node.right != null) {
stack.push(node.right);
path.add(String.valueOf(new StringBuffer(pathTemp).append("->").append(node.right.val)));
}
if (node.left != null) {
stack.push(node.left);
path.add(String.valueOf(new StringBuffer(pathTemp).append("->").append(node.left.val)));
}
}
return ans;
}
}
3 复杂度分析
时间复杂度:
空间复杂度:
4 涉及到知识点
方法二 递归
1 方法思想
2 代码实现
/**
* 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 {
List<String> ans = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
if (root == null) return ans;
else {
if (root.left != null) {
getPath(root.left, String.valueOf(root.val));
}
if (root.right != null) {
getPath(root.right, String.valueOf(root.val));
}
if (root.left == null && root.right == null)ans.add(String.valueOf(root.val));
}
return ans;
}
public void getPath(TreeNode node, String path) {
String temPath = path + "->" + String.valueOf(node.val);
if (node.left != null) {
getPath(node.left, temPath);
}
if (node.right != null) {
getPath(node.right, temPath);
}
if (node.left == null && node.right == null){
ans.add(temPath);
}
}
}
3 复杂度分析
时间复杂度:
空间复杂度:
4 涉及到知识点
收获和总结
1.遇到的困难?
2 收获
学习链接
https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF
404. Sum of Left Leaves
题目链接:https://leetcode.cn/problems/sum-of-left-leaves/
方法一 递归
1 方法思想
2 代码实现
/**
* 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;
int mid = 0;
int leftTree = sumOfLeftLeaves(root.left);
int rightTree = sumOfLeftLeaves(root.right);
if (root.left!=null && root.left.left == null && root.left.right == null){
mid = root.left.val;
}
return leftTree + mid + rightTree;
}
}
3 复杂度分析
时间复杂度:
空间复杂度:
4 涉及到知识点
方法二 迭代
1 方法思想
2 代码实现
/**
* 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;
int mid = 0;
int leftTree = sumOfLeftLeaves(root.left);
int rightTree = sumOfLeftLeaves(root.right);
if (root.left!=null && root.left.left == null && root.left.right == null){
mid = root.left.val;
}
return leftTree + mid + rightTree;
}
}
3 复杂度分析
时间复杂度:
空间复杂度:
4 涉及到知识点
收获和总结
1.遇到的困难?
2 收获
学习链接
https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF