1. 二叉树面试核心知识点全解析
作为Java开发者面试中的必考知识点,二叉树相关题目在中低难度面试题中占比超过80%。掌握好这部分内容,能让你在技术面试中游刃有余。下面我将从五个维度全面剖析二叉树的核心考点。
1.1 二叉树的结构定义与实现
在面试中,手写二叉树节点定义是最基础的考察点。力扣、牛客等平台的二叉树节点定义都是固定的Java版本,必须烂熟于心:
java复制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;
}
}
面试技巧:
- 手写时不需要写注释,但构造方法要完整
- 如果时间紧张,可以只写前两种构造方法(覆盖90%的使用场景)
- 注意变量命名规范,使用left/right而不是lChild/rChild等非标准命名
1.2 二叉树的五大核心分类
面试中常会问到不同类型的二叉树及其特性,以下是必须掌握的五大类型:
| 类型 | 核心定义 | 面试考点 | 典型问题 |
|---|---|---|---|
| 普通二叉树 | 每个节点最多2个子节点,无其他限制 | 基础遍历、深度计算、对称判断 | 前中后序遍历、最大深度 |
| 满二叉树 | 除叶子节点外都有左右子节点,且叶子在同一层 | 节点数计算(2^h-1) | 计算满二叉树的节点数 |
| 完全二叉树 | 层序遍历编号与满二叉树一致 | 数组转二叉树、堆结构 | 堆的实现、完全二叉树验证 |
| 二叉搜索树(BST) | 左子树所有节点值 < 根 < 右子树所有节点值 | 中序遍历升序、搜索效率 | BST验证、第K小元素 |
| 平衡二叉树(AVL) | 左右子树高度差≤1 | 平衡性维护、旋转操作 | AVL树旋转、红黑树基础 |
常见误区:
- 混淆完全二叉树和满二叉树的概念
- 认为BST的中序遍历可以有重复值(实际必须是严格升序)
- 忽略平衡二叉树的高度差绝对值≤1的条件
1.3 二叉树的四大遍历方式
遍历是二叉树所有操作的基础,必须掌握递归和迭代两种实现方式。
1.3.1 深度优先遍历(DFS)
递归模板(必须熟记):
java复制// 前序遍历
void preorder(TreeNode root) {
if(root == null) return;
System.out.print(root.val + " "); // 访问根节点
preorder(root.left); // 左子树
preorder(root.right); // 右子树
}
// 中序遍历
void inorder(TreeNode root) {
if(root == null) return;
inorder(root.left); // 左子树
System.out.print(root.val + " "); // 访问根节点
inorder(root.right);
