什么是二叉树?

二叉树是数据结构中最基础也最重要的结构之一,就像盖房子先打地基一样,理解二叉树能帮你后续轻松掌握更复杂的结构(比如堆、红黑树等)。

想象一下,二叉树长得像一棵“分叉树”——每一个“分叉点”都是一个“节点”,每个节点最多能分出两个“子节点”,左边的叫“左子节点”,右边的叫“右子节点”。没有子节点的节点叫“叶子节点”(就像树的叶子一样)。

举个简单的例子:你家院子里有一棵苹果树,每个苹果可以看作一个“节点”,连接苹果和树干的树枝就是“边”。如果树干是“根节点”,它可能分出两根树枝(左枝和右枝),每根树枝上又可能有多个苹果(子节点),但每根树枝最多只能有两个苹果(因为二叉树每个节点最多两个子节点)。

二叉树的“零件清单”:基本术语

要画二叉树,得先认识它的“零件”:

  • 节点:树的基本单元,里面可以放数据(比如数字、字符串等)。
  • 根节点:树的“最顶层”节点,没有父节点,是树的起点。
  • 叶子节点:没有子节点的节点,是树的“最底层”。
  • 子节点:从某个节点“长”出来的下一层节点(左子节点或右子节点)。
  • 父节点:有子节点的节点(比如“根节点”是“左子节点”的父节点)。
  • 左子树/右子树:一个节点的左子节点和它的所有后代组成“左子树”,右子节点和它的所有后代组成“右子树”。

手把手画二叉树:从简单到复杂

现在,我们用“画图法”一步步掌握二叉树的画法,跟着步骤画,你会发现超简单!

第一步:最简单的二叉树——只有根节点

先画一个“圆圈”代表根节点,里面写个数字(比如1)。这棵树只有根节点,没有子节点,所以它也是叶子节点。

  1

第二步:根节点只有左子节点

在根节点的正下方偏左画一个小圆圈(左子节点),里面写数字(比如2)。根节点的右边暂时不画(表示没有右子节点)。

  1
 /
2

第三步:根节点只有右子节点

在根节点的正下方偏右画一个小圆圈(右子节点),里面写数字(比如2)。左边不画。

  1
   \
    2

第四步:根节点有左右两个子节点

根节点下面偏左画左子节点(比如2),偏右画右子节点(比如3)。

  1
 / \
2   3

第五步:给左子节点再“长”出子节点

以第二步的树为例,左子节点2可以继续长左子节点(4)和右子节点(5)。此时树的结构是:

    1
   / \
  2   3
 / \
4   5

这里要注意:每个节点最多只能有两个子节点,不能多画。比如如果2下面画了三个子节点,那就不是二叉树了!

第六步:给右子节点也“长”出子节点

继续在第四步的基础上,给右子节点3加左子节点6和右子节点7:

    1
   / \
  2   3
 / \ / \
4  5 6  7

第七步:判断“不是二叉树”的错误画法

错误例子1:某个节点有三个子节点(比如根节点1下面画三个分支):

  1
 /|\
2 3 4  // 这不是二叉树!

错误例子2:子节点位置混乱(比如左子节点的右子节点比根节点的右子节点还高)——画图时尽量保持层次,根节点在最上,子节点在根的下一层,孙子节点在子节点的下一层,以此类推。

二叉树的“身份验证”:怎么判断是二叉树?

只要满足两个条件,就是二叉树:

  1. 每个节点最多有0、1或2个子节点(不能超过2个);
  2. 所有子节点的位置是有序的(左子节点和右子节点有明确区分,不能交换顺序而改变树的结构)。

二叉树遍历与画图结合(简单版)

知道了怎么画树,那怎么通过“遍历结果”反推树的结构呢?这里先简单介绍三种遍历方式(后续会深入):

  • 前序遍历(根→左→右):先画根节点,再画左子树,最后画右子树。
  • 中序遍历(左→根→右):先画左子树,再画根节点,最后画右子树。
  • 后序遍历(左→右→根):先画左子树,再画右子树,最后画根节点。

举例:假设前序遍历结果是 1 2 4 5 3 6 7,怎么画出树?

  • 前序第一个是根节点1,所以先画1。
  • 前序剩下的是左子树(2 4 5)和右子树(3 6 7)。
  • 左子树的第一个是2,所以2是1的左子节点。
  • 2的前序剩下4、5,4是2的左子节点,5是2的右子节点。
  • 右子树的第一个是3,所以3是1的右子节点。
  • 3的前序剩下6、7,6是3的左子节点,7是3的右子节点。

最终画出的树和之前第四步加第五步的例子一致:

    1
   / \
  2   3
 / \ / \
4  5 6  7

总结:画树是理解二叉树的“金钥匙”

二叉树的“画”是学习的核心——通过画图,你能直观看到每个节点的位置、子节点的数量和层次关系。刚开始可能觉得难,多画几次简单的树(比如只有根、只有左/右孩子、三层树),很快就能掌握。

记住:二叉树是堆、二叉搜索树、哈夫曼树等复杂结构的“地基”,画树的过程不仅能帮你理解基础,还能为后续学习算法(比如排序、查找)打下坚实基础。

现在,你可以找一张纸,尝试画一棵包含根、左右孩子、孙子节点的二叉树,动手画一两个例子,你会发现:二叉树,原来这么简单!

小夜