110. 平衡二叉树
给定一个二叉树,判断它是否是平衡二叉树(平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。)
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:true示例 2:
输入:root = [1,2,2,3,3,null,null,4,4] 输出:false示例 3:
输入:root = [] 输出:true提示:
- 树中的节点数在范围
[0, 5000]
内-104 <= Node.val <= 104
状态:没想到😢
思路:前序遍历找各个节点的左右节点的深度,如果其中一个左右节点的差大过1则返回-1,则此树不是平衡二叉树。
class Solution {
public boolean isBalanced(TreeNode root) {
return getHeight(root)!=-1;
}
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(right-left)>1) return -1;
return Math.max(left,right)+1;
}
}
257. 二叉树的所有路径
给你一个二叉树的根节点
root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"]示例 2:
输入:root = [1] 输出:["1"]提示:
- 树中节点的数目在范围
[1, 100]
内-100 <= Node.val <= 100
状态:完成
思路:这题用前序遍历,当左右节点都为空时到了叶子节点添加进list中。
class Solution {
List<String> list =new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
pre(root,"");
return list;
}
public void pre(TreeNode root,String str){
if(root==null){
return;
}
str+="->"+root.val;
if(root.left!=null) pre(root.left,str);
if(root.right!=null) pre(root.right,str);
if(root.left==null&&root.right==null){
list.add(str.substring(2,str.length()));
}
}
}
404. 左叶子之和
给定二叉树的根节点
root
,返回所有左叶子之和。示例 1:
输入: root = [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24示例 2:
输入: root = [1] 输出: 0提示:
- 节点数在
[1, 1000]
范围内-1000 <= Node.val <= 1000
状态:完成
思路:使用前序遍历,遍历传入参数两个一个是当前节点,一个是是否是左节点,用来区分左右叶子节点,当是叶子节点是sum加上当前节点的值。
class Solution {
int sum=0;
public int sumOfLeftLeaves(TreeNode root) {
isLeft(root,false);
return sum;
}
public void isLeft(TreeNode root,boolean isLeft){
if(root==null) return ;
if(root.right==null&&root.left==null&&isLeft){
sum+=root.val;
return;
}
isLeft(root.left,true);
isLeft(root.right,false);
}
}