110.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
返回 false 。
思路:
平衡二叉树,求的是左右子树的高度差是否小于等于1,求高度用后序遍历的方法。求深度用前序遍历方法
第一步,输入类型和返回参数 -> int getHeight(TreeNode node)
第二步,终止条件 -> node == null , return 0
第三步,递归逻辑,先计算左子树高度,如果等于-1,则返回-1;再计算右子树,最后计算他俩相减的绝对值高度差。
class Solution {
public boolean isBalanced(TreeNode root) {
return getHeight(root) != -1;
}
private int getHeight(TreeNode cur){
if(cur == null) return 0;
int leftHeight = getHeight(cur.left);
if(leftHeight == -1) return -1;
int rightHeight = getHeight(cur.right);
if(rightHeight == -1) return -1;
if(Math.abs(leftHeight - rightHeight) > 1){
return -1;
}
return Math.max(leftHeight, rightHeight)+1;
}
}
257. 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
思路:
递归法,第一步:递归函数参数以及返回值
第二步:递归终止条件
第三步:确定单层递归逻辑
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res = new ArrayList<>();
if(root == null) return res;
List<Integer> paths = new ArrayList<>();
traveral(root, paths, res);
return res;
}
private void traveral(TreeNode node , List<Integer> paths, List<String> res){
paths.add(node.val);
if(node.left == null && node.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(node.left != null){
traveral(node.left, paths, res);
paths.remove(paths.size()-1);
}
if(node.right != null){
traveral(node.right, paths, res);
paths.remove(paths.size()-1);
}
}
}
404.左叶子之和
计算给定二叉树的所有左叶子之和。
示例:
思路:
递归用法,还是前序遍历的中左右顺序,首先第一步判断输入的参数值和返回值,发现可以直接用目标函数,其次终止条件肯定是root == null终止,最后判断递归循环的逻辑,一定是中左右或者左右中都行,左叶子包括,意思就是左子树的左孩子,是个叶子节点,右子树的左孩子,是个叶子节点,将数值相加即可。
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if(root == null) return 0;
int leftvalue = sumOfLeftLeaves(root.left);
int rightvalue = sumOfLeftLeaves(root.right);
int midvalue = 0;
if(root.left != null && root.left.left == null && root.left.right == null){
midvalue = root.left.val;
}
return midvalue + leftvalue+rightvalue;
}
}
标签:node,paths,return,随想录,404,二叉树,null,root
From: https://blog.51cto.com/u_15505301/6449720