高度:任何一个节点到叶子节点所经过的最长路径的节点个数。适合用后序遍历。
深度:任何一个节点到根节点所经过的最长路径的节点个数。适合用前序遍历。
技巧:二叉树的最大深度和根节点的高度是一样的。因此深度问题可以转化成高度问题。
层序遍历
对应力扣上的题目:102. 二叉树的层序遍历 - 力扣(LeetCode)
使用队列来实现
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res=new ArrayList<>();
if(root==null) return res;
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size=queue.size();
List<Integer> list=new ArrayList<>();
while(size-->0){
TreeNode cur=queue.poll();
list.add(cur.val);
if(cur.left!=null){
queue.offer(cur.left);
}
if(cur.right!=null){
queue.offer(cur.right);
}
}
res.add(list);
}
return res;
}
}
刷题总结
大部分二叉树的题目都可以用递归和迭代法解决。
递归法从三个方面考虑:
1.确定函数的返回值和参数
2.确定终止条件
3.确定每一层的逻辑
递归法逻辑是从前序遍历、后序遍历、中序遍历入手。
迭代法可以用层序遍历入手。