自然界有没有二叉树? 知乎用户,9月闭关/不会数据结构的历史爱好者不是好的博物学家 @peisen 的回答提到了一点: 由于这种分枝方式的两个分枝或称子树是平等的,所以这些二叉树植物多为形态优美的满二叉树。另外由于植物只有分枝处才适宜看作节点,所以如果不是完全二叉树看起来就不明显。 是的,严格说起来,二叉树比想象的常见得多。 常见得多! 根据二叉树的定义——每个节点最多有两个分枝的树——进行判断,自然界相当多的树都属于此类:对于叶互生的植物类群,所有有分叉的地方,全部都是二分枝。 所以,没有特殊情况,所有互生叶的植物,分枝类型,都是二叉树。 第一种情况:单轴分枝、合轴分枝,以及理想状态下的斐波那契树 举个例子: 一棵树一年后长出一条新枝,新枝隔一年后成为老枝,老枝又可每年长出一条新枝,如此下去,十年后新枝将有多少? 这样一棵再普通不过的树,没有任何「假二叉分枝」或者「真二叉分枝」,是不是一棵二叉树呢? 当然是啊,而且是一棵斐波那契树。 其实斐波那契树可以通过如下方式构造: G(n) = n – G(G(n – 1)) ,其中 G(1) = 1 。 来我们算一下: n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 G(n) 1 1 2 3 3 4 4 5 6 6 7 8 8 9 9 10 11 11 12 12 13 14 14 15 16 16 17 17 18 19 这个数列通常被称作 Hofstadter G-sequence 。它有什么特别的地方呢?如果把每个标号为 n 的结点都连接到标号为 G(n) 的结点下方,这样的话你将会得到一棵树。 这棵树的特征之一,是自相似——任何一个左子节点包含的树,都跟她的双亲节点自相似;任何一个右子节点包含的子树,都跟它的双亲节点自相似。 其实这是由于数列本身的性质决定的: 这样的树,很像是自然界出现的大部分「合轴分枝」的树,你能说它不是二叉树么? 而「单轴分枝」的树,由于顶芽的顶端优势太大,只有足够遥远的侧枝才能发育,因此看起来,就像是这张斐波那契树一样: 纵使总有主枝,细细看来,仍然是一棵二叉树。 不管分枝方式如何,是不断用侧芽代替顶芽的合轴分枝,还是一直维持顶端优势的单轴分枝,自然界相当多的树,都如第 1 张图,以及上图一样,属于斐波那契树这种特殊的二叉树。 (感谢 Hofstadter 的非线性递推数列这篇文章,有兴趣的可以去看看) 所以你几乎可以找出任何一棵互生叶的树的照片,然后指着它说——这是一棵二叉树。 第二种情况:满二叉树 严格意义上的满二叉树,又会在什么情况下出现呢? 之前提到的互生叶植物的分枝,其实属于老枝 + 新枝;这种情况,只产生一个新的枝条,并且新枝总是不如老枝粗壮,对应二叉树的描述,也就是每一个左右子节点并不互成镜像。 满二叉树则是一棵每一个双亲节点都有两个子节点的树;这样的二叉树,每一个左右子节点互成镜像,是其性质之一。 也就是说,每一次分枝的时候,都要左右分枝一样大,不能有偏颇。 这一点,自然界是如何实现的呢? 这里不得不提一下关于二叉分枝的概念——二叉分枝与假二叉分枝。 二叉分枝,其产生的原因,是植物的顶端分生组织,由于某种原因,一分为二,直接产生了两个顶端分生组织;这两个部分,如果分裂、生长的速度一样,那么就会长出两个一模一样的侧枝,这样形成的植株,外观上就是满二叉树一样,也就是特别典型、过目难忘的二叉树了。 这种情况并不多见,经常出现在比较早期就出现的植物类群当中——藻类、苔藓、蕨类;有不少古生物化石,就体现了这样的状态。 你们可以感受一下。 别看名字叫「鳞木」「封印木」(好中二的名=-=),这些可是货真价实的蕨类哟。 看到没,不仅树枝是二叉树,连每一条不定根,都是二叉树,可谓二叉到了骨子里。 就是这些数亿年前的树状蕨,形成了今天的你妹,呃不,泥煤。 现在能看到的呢,也有许多是蕨类。peisen 回答里的铁芒萁 Dicranopteris linearis,就是蕨类;而地钱则是苔藓当中的苔类。 再给个例子吧,藤石松: 非常非常典型的二叉分枝。 卷柏也是石松类植物,现在已经不再划归于蕨类,而属于蕨类的姐妹类群。 至于铁芒萁属于假二叉分枝……铁芒萁的复叶,分枝的地方,并不属于顶芽死亡导致侧芽生长的情况,个人认为,并不是假二叉分枝。 并且分枝的地方,也有小叶,外观上也并不应该属于「四叉分枝」,因为那两片叶应该是属于该双亲节点本身的内容,而非双亲节点的另外两个子节点。 刚刚提到了「假二叉分枝」——由于植物存在顶端优势,顶芽的存在,(以分泌的生长素为主要的调节方式)会抑制侧芽的萌发;一旦顶芽的死亡,顶芽下方最近的叶腋,其中的侧芽将解除抑制,萌发新的枝条;如果同一个节有两个相对的侧芽,分枝的情形,就属于假二叉分枝。 如果某种植物,叶的排列属于对生,即同一个节上面有两片相对的叶片,也就有了两个相对的、同一「节点」的叶腋和腋芽,当顶芽死亡、侧芽萌发之后,显现的也就是该节点的左孩子和右孩子——这种外观,更符合「二叉树」的常见外观,因而更容易与二叉树联系起来。 这也就是演化当中更晚出现的一种「二叉树」,前提是,你必须把死掉的顶芽,看成是双亲节点本身的内容,而不是双亲节点的第三个长度很短的分枝。 譬如鸡爪槭 Acer palmatum,它的枯枝,就是典型的假二叉分枝,也是「二叉树」。 然而这种观叶植物并不能找到枯枝的图片……下次自己拍吧…… 如果顶芽还没死,侧芽就萌发了,那这就不会形成「二叉树」,而是「三叉戟」,不对,「三叉树」了。 与这种情况相关的,其实还有一种花序的类型——二歧聚伞花序。 这种花序的产生,与「假二叉分枝」如出一辙,花序产生时,顶芽先开花,顶芽下方两个分支分别形成新的花芽,如此循环往复。 由于顶芽是花芽,开花之后一定不会生长,只要把这朵花看成双亲节点本身的内容,而不是第三个分枝,整个花序,就是一个非常漂亮的二叉树。 譬如繁缕 Stellaria media CFH 图库这张实在是太典型了 球序卷耳 Cerastium glomeratum CFH 图库 这个种有点缩在一起。 你们可以看一下另一种的墨线图,缘毛卷耳 Cerastium furcatum 卷耳 CFH 图库 某些景天科的东西也有类似的花序。 繁缕景天 Sedum stellariifolium(怎么又带上繁缕这俩字) 还有名字就带二歧的二歧草科(译名)植物(不再隶属于虎耳草科): (引自http://128.253.192.70/imgs/sv22/na/Vahliaceae_Vahlia_viscosa_15413.html及Kyffhäuser flora) 多说一句,所有的螺旋聚伞花序和蝎尾聚伞花序,类似于合轴分枝,也都可以看成是二叉树,只不过外观有点怪怪的——你们得要从结构,而不是外观的层面看待。 譬如聚合草 Symphytum officinale 永远有一个子节点没有自己的子节点;但仍然是一棵二叉树。 至于夹竹桃这样三叶轮生的东西,以及泽漆这样多歧聚伞的花序,当然是怎么样都算不上二叉树的——分叉太多了,没法圆谎。 夹竹桃 Nerium oleander 注意左下角的三分枝,除开开花的那一个,还有三个侧枝。 泽漆 Euphorbia helioscopia 又有一个名字叫五朵云,当然不是没有理由的: 是的,这是一个五叉树,每一枝又是三叉树。 这种情况还是挺漂亮的。 自然界的二叉树其实一点都不少见,少见的是完美的满二叉树。 不止是植物啦,所有的构件生物,多多少少都可以看做是二叉树或者是 N 叉树的——每一个构件,不仅仅体现了重复与自相似,也体现了不断分叉的结构;每一个分枝都可以某种程度上完成大部分的生命活动,这也是所谓「细胞全能性」带来的结果。 那些珊瑚(红珊瑚) 橘青霉 Penicillium citrinum 不都是如此么? 作为在初中进高中的暑假,参加过 1 个月信息竞赛,然后转投生物竞赛(对,我就是从 CS 爬进了生科的坑)的奇葩,也算有资格回答一下这个问题。 其实这个问题很早我就考虑过了——那一个月,以及高中三年,不断听到信息竞赛组的同学聊起各种数据结构,譬如二叉树、平衡二叉树、满二叉树;双亲节点、子节点……等等名称,大概知道他们提到的数据结构是怎么一回事。 这些内容,与「植物的分枝方式」和「有限花序」这两节联系起来,还蛮有意思的。 【完】 查看知乎原文