二叉树高度到底怎么算?90%的人第一步就错了

👤 智造未来 📂 人工智能 📅 2026-03-13 08:23 👁 2 阅读

刷LeetCode时看到"求树的高度",你是不是直接上手写递归,结果提交就报错?面试被问到这道题,背了模板却讲不清原理,当场社死?别慌,这题看似简单,坑多得能埋人——有人把根节点算成0,有人把单节点树算成1,面试官问"你确定?",手心全是汗。

高度的定义本身就有两套"方言"。算法题里通常规定:空树高度是-1或0,单节点树高度是0或1,全看题目心情。最保险的数法是"边数":根到最远叶子有几条边,高度就是几。这样单节点树是0,根带两个叶子是1,清晰好算。递归公式就这么简单:height(root) = max(height(left), height(right)) + 1。这个+1加的是当前这层到子树的那条边,不是节点个数。很多人死记代码,却不知道+1从哪来,换道题立马懵。

实际写代码时,递归和迭代都能搞定。递归优雅但栈深可能爆,100层树就悬;迭代用层序遍历(BFS),一层一层数,队列里放节点,每清一层计数器+1,到队列为空就是答案。BFS的好处是顺便能求最小深度,还能提前发现不平衡节点。我见过有人用DFS非递归,手动压栈模拟递归,面试官眼睛都亮了——这属于秀操作,但别炫过头把自己绕进去。 真正值钱的是理解背后的设计思想。高度决定了树的倾斜程度,AVL树和红黑树靠它自平衡;B+树的高度直接影响磁盘IO次数,数据库索引优化全看这一手。下次面试官再问,你能从代码聊到工程应用,offer基本稳了。

你算高度时踩过什么坑?是空树处理错了,还是把深度和高度搞混了?评论区聊聊,我帮你看看哪一步走偏了。

标签: 二叉树的高度怎么算的