1. 二叉树基础概念与核心特性
二叉树是每个节点最多有两个子节点的树形数据结构,这种结构在算法面试中出现频率极高。我见过太多候选人因为对基础概念理解不透彻而在白板 coding 环节翻车。我们先明确几个关键术语:
- 根节点(Root):没有父节点的顶层节点
- 叶子节点(Leaf):没有子节点的末端节点
- 深度(Depth):从根到该节点的边数
- 高度(Height):从该节点到最深叶子节点的边数
二叉树的特殊形态需要特别关注:
- 满二叉树:每个节点都有0或2个子节点
- 完全二叉树:除最后一层外完全填充,且最后一层节点靠左排列
- 二叉搜索树(BST):左子树所有节点值 < 根节点值 < 右子树所有节点值
java复制// 基础二叉树节点定义
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
注意:面试中经常要求手写这个基础结构,务必确保字段命名正确。我曾见过候选人把
left/right写成lChild/rChild导致面试官质疑其编码规范。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 二叉树遍历的四种经典实现
遍历是二叉树所有算法的基础,必须掌握递归和非递归两种实现方式。根据访问顺序不同分为:
2.1 前序遍历(根-左-右)
递归版本简洁但容易栈溢出:
java复制void preorder(TreeNode root) {
if (root == null) return;
System.out.print(root.val + " ");
preorder(root.left);
preorder(root.right);
}
非递归版本建议用栈模拟:
java复制void preorderStack(TreeNode root) {
if (root == null) return;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmp
