● 110.平衡二叉树
题目链接:https://leetcode.cn/problems/balanced-binary-tree/
解答:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html#google_vignette
一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
● 257. 二叉树的所有路径
题目链接:https://leetcode.cn/problems/binary-tree-paths/
解答:
这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。
回溯:递归和回溯是同时进行的,所以需要放在同一个花括号里
paths.remove(paths.size()-1)
找到一条路径以后,要存储:
StringBuffer sPath = new StringBuffer();//初始化
for(int i=0; i<path.size()-1;i++){
sPath.append(Integer.toString(path.get(i)));
sPath.append("->");
}
sPath.append(Integer.toString(path.get(path.size()-1)));//最后一个单独添加
result.add(sPath.toString());
● 404.左叶子之和
题目链接:https://leetcode.cn/problems/sum-of-left-leaves/
解答:https://programmercarl.com/0404.%E5%B7%A6%E5%8F%B6%E5%AD%90%E4%B9%8B%E5%92%8C.html
左叶子的明确定义:节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点
那么判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子:如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子
if (node.left !=null && node.left.left==null && node.left.right==null){
sum+= node.left.val;
}
递归法:
1. 确定递归的终止条件
2. 先计算左边所有左子叶的节点和
3. 判断这个节点为父节点是否存在左子叶 如果存在 将其值加上
4. 计算右边所有左子叶的节点和
5.所有左子叶节点和相加并返回
迭代法:
使用中、前、后序遍历,前序和后序遍历的写法没有本质却别,只是改变了入栈顺序并做了一个反转