现在我正在研究我的算法设计教科书中的一个问题,而且我已经碰到了一些砖墙。
问题是:
二叉树是一个有根树,每个节点最多有两个 儿童。通过归纳显示在任何二叉树中的数量 有两个孩子的节点正好比叶子数少一个。
我有理由相信如何做到这一点:基本案例有一个节点,这意味着树有一个叶子,零节点有两个子节点。但是,我不确定归纳步骤究竟会带来什么。
答案 0 :(得分:11)
具有单个节点但没有子节点的树(显然),/是一个叶子。具有两个子节点(0)的节点数正好比叶子数(1)少一个。
将节点添加到没有子节点的现有节点,不会更改包含两个子节点的节点数,也不会更改叶子数。
将节点添加到具有一个子节点的现有节点,将具有两个子节点的节点数增加1,并且还将叶数增加1.
您无法将节点添加到包含任何其他子节点数的现有节点。
由于具有两个子节点的节点的数量正好比叶子的数量少一个,并且向树中添加节点要么既不改变数字,要么两者都增加,那么它们之间的差异将始终完全相同之一。
答案 1 :(得分:1)
对具有2个孩子的节点数进行归纳:
基础 - 有2个孩子的0个节点 - 1个叶子(假设根不计为一个)。 步骤 - 令T为具有n + 1的树>有2个孩子的0个节点
=>有一个带有2个子节点a1,a2的节点a,并且在以a1或a2为根的子树中没有带有2个子节点的节点。我们可以假设它是以a1为根的子树。
=>删除以a1为根的子树,我们得到一个树T',其中n个节点有2个子节点。
=> T'有n + 1片叶子。
=>添加以a1到T'为根的子树 - 我们添加了一个叶子和一个带有2个子节点的节点。
您需要完成一些漏洞,但它正在发挥作用。 抱歉我的英语不好。