二叉树算法实战指南
二叉树基础结构
二叉树的每个节点包含三个部分:数据域、左子节点指针和右子节点指针。用C++定义如下:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
Python实现通常用类表示:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
核心遍历方法
递归遍历模板
void traverse(TreeNode* root) {
if (!root) return;
// 前序位置
traverse(root->left);
// 中序位置
traverse(root->right);
// 后序位置
}
迭代遍历实现 层次遍历(BFS)示例:
from collections import deque
def levelOrder(root):
if not root: return []
q = deque([root])
res = []
while q:
level = []
for _ in range(len(q)):
node = q.popleft()
level.append(node.val)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
res.append(level)
return res
关键操作接口
插入节点
public TreeNode insert(TreeNode root, int val) {
if (root == null) return new TreeNode(val);
if (val < root.val)
root.left = insert(root.left, val);
else
root.right = insert(root.right, val);
return root;
}
删除节点 需要考虑三种情况:
- 无子节点:直接删除
- 只有一个子节点:用子节点替换
- 有两个子节点:用右子树最小节点替换
OJ实战技巧
路径总和问题
def hasPathSum(root, target):
if not root: return False
if not root.left and not root.right:
return target == root.val
return hasPathSum(root.left, target-root.val) or hasPathSum(root.right, target-root.val)
最近公共祖先
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (!root || root == p || root == q) return root;
auto left = lowestCommonAncestor(root->left, p, q);
auto right = lowestCommonAncestor(root->right, p, q);
if (left && right) return root;
return left ? left : right;
}
性能优化策略
- 对于频繁查询的问题,考虑使用哈希表存储节点信息
- 在递归过程中利用返回值传递多个信息时,可以使用结构体或pair
- 对于大规模数据,迭代法通常比递归法更节省内存空间
常见错误排查
- 空指针异常:始终检查节点是否为null
- 无限递归:确保递归终止条件正确
- 状态污染:在回溯算法中注意恢复现场
- 边界条件:特别注意树为空或单节点的情况
BbS.okapop123.sbs/PoSt/1122_851074.HtM
BbS.okapop124.sbs/PoSt/1122_666591.HtM
BbS.okapop125.sbs/PoSt/1122_699533.HtM
BbS.okapop126.sbs/PoSt/1122_135605.HtM
BbS.okapop127.sbs/PoSt/1122_292155.HtM
BbS.okapop128.sbs/PoSt/1122_321021.HtM
BbS.okapop129.sbs/PoSt/1122_259299.HtM
BbS.okapop130.sbs/PoSt/1122_934415.HtM
BbS.okapop131.sbs/PoSt/1122_472398.HtM
BbS.okapop132.sbs/PoSt/1122_093392.HtM
BbS.okapop123.sbs/PoSt/1122_603829.HtM
BbS.okapop124.sbs/PoSt/1122_727498.HtM
BbS.okapop125.sbs/PoSt/1122_570673.HtM
BbS.okapop126.sbs/PoSt/1122_788487.HtM
BbS.okapop127.sbs/PoSt/1122_906865.HtM
BbS.okapop128.sbs/PoSt/1122_884489.HtM
BbS.okapop129.sbs/PoSt/1122_698183.HtM
BbS.okapop130.sbs/PoSt/1122_120925.HtM
BbS.okapop131.sbs/PoSt/1122_536429.HtM
BbS.okapop132.sbs/PoSt/1122_419348.HtM
BbS.okapop133.sbs/PoSt/1122_783388.HtM
BbS.okapop134.sbs/PoSt/1122_807797.HtM
BbS.okapop135.sbs/PoSt/1122_599842.HtM
BbS.okapop136.sbs/PoSt/1122_231077.HtM
BbS.okapop137.sbs/PoSt/1122_240230.HtM
BbS.okapop138.sbs/PoSt/1122_438925.HtM
BbS.okapop139.sbs/PoSt/1122_227257.HtM
BbS.okapop140.sbs/PoSt/1122_806848.HtM
BbS.okapop141.sbs/PoSt/1122_723695.HtM
BbS.okapop142.sbs/PoSt/1122_914274.HtM
BbS.okapop133.sbs/PoSt/1122_587569.HtM
BbS.okapop134.sbs/PoSt/1122_946894.HtM
BbS.okapop135.sbs/PoSt/1122_114103.HtM
BbS.okapop136.sbs/PoSt/1122_160812.HtM
BbS.okapop137.sbs/PoSt/1122_845072.HtM
BbS.okapop138.sbs/PoSt/1122_646042.HtM
BbS.okapop139.sbs/PoSt/1122_352290.HtM
BbS.okapop140.sbs/PoSt/1122_685817.HtM
BbS.okapop141.sbs/PoSt/1122_692714.HtM
BbS.okapop142.sbs/PoSt/1122_108396.HtM
BbS.okapop133.sbs/PoSt/1122_879155.HtM
BbS.okapop134.sbs/PoSt/1122_675838.HtM
BbS.okapop135.sbs/PoSt/1122_785752.HtM
BbS.okapop136.sbs/PoSt/1122_387981.HtM
BbS.okapop137.sbs/PoSt/1122_654955.HtM
BbS.okapop138.sbs/PoSt/1122_965417.HtM
BbS.okapop139.sbs/PoSt/1122_691279.HtM
BbS.okapop140.sbs/PoSt/1122_082557.HtM
BbS.okapop141.sbs/PoSt/1122_421686.HtM
BbS.okapop142.sbs/PoSt/1122_834601.HtM
BbS.okapop133.sbs/PoSt/1122_884042.HtM
BbS.okapop134.sbs/PoSt/1122_683712.HtM
BbS.okapop135.sbs/PoSt/1122_605599.HtM
BbS.okapop136.sbs/PoSt/1122_929563.HtM
BbS.okapop137.sbs/PoSt/1122_498726.HtM
BbS.okapop138.sbs/PoSt/1122_511810.HtM
BbS.okapop139.sbs/PoSt/1122_682136.HtM
BbS.okapop140.sbs/PoSt/1122_247039.HtM
BbS.okapop141.sbs/PoSt/1122_237360.HtM
BbS.okapop142.sbs/PoSt/1122_052144.HtM
BbS.okapop133.sbs/PoSt/1122_004587.HtM
BbS.okapop134.sbs/PoSt/1122_409243.HtM
BbS.okapop135.sbs/PoSt/1122_232667.HtM
BbS.okapop136.sbs/PoSt/1122_776155.HtM
BbS.okapop137.sbs/PoSt/1122_163990.HtM
BbS.okapop138.sbs/PoSt/1122_586527.HtM
BbS.okapop139.sbs/PoSt/1122_202895.HtM
BbS.okapop140.sbs/PoSt/1122_444918.HtM
BbS.okapop141.sbs/PoSt/1122_918775.HtM
BbS.okapop142.sbs/PoSt/1122_670040.HtM
BbS.okapop133.sbs/PoSt/1122_856496.HtM
BbS.okapop134.sbs/PoSt/1122_651366.HtM
BbS.okapop135.sbs/PoSt/1122_236567.HtM
BbS.okapop136.sbs/PoSt/1122_794585.HtM
BbS.okapop137.sbs/PoSt/1122_947239.HtM
BbS.okapop138.sbs/PoSt/1122_529188.HtM
BbS.okapop139.sbs/PoSt/1122_199375.HtM
BbS.okapop140.sbs/PoSt/1122_269062.HtM
BbS.okapop141.sbs/PoSt/1122_822270.HtM
BbS.okapop142.sbs/PoSt/1122_107332.HtM
