森林转二叉树的一个问题

题目描述#

设F是一个森林,B是由F转换得到的二叉树,F中有n个非终端节点,则B中右指针域为空的节点有______个?

答案是n+1

思路#

首先F是一个森林,未规定森林中树的度,就是里面可能有任意叉的树。

要把森林转换成二叉树,首先得把森林中的树一个一个转换成左子右兄弟表示的二叉树,再把它们接到一起。

就这样接。第一层代表森林中的树,第二层代表森林中的树都转换成左子右兄弟表示,第三层代表把这些转换过的树合成一个新二叉树。记住,原森林中有4个非终端节点,1,5,6,8,这就是题目中的n

按照左子右兄弟的定义,转换成二叉树后没有右子节点就代表它在原树中是一排亲兄弟中最右的那一个,或者是根节点。

下图中的黑色节点代表的就是这种节点。

按照定义把这些森林连接成树之后,就只剩下森林中最后一棵树没有右子节点。

有了这些知识,我们就可以考虑n+1这个答案是怎么来的了。

我们知道最后合成的树中的没有右子节点的节点来自于原树中的亲兄弟的最右兄弟和最后被接的树的根,而原树中有n个非终端节点,也就是非叶子节点,每个非叶子节点都会有若干个孩子,这些孩子里必定有一个排在最右,也就是我们之前说的最右兄弟,那么也就是说,原树中有n个节点,合成的二叉树中就会有n个节点无右子节点,再加上最后合并的树的树根无右子节点,所以答案就是n+1

posted @   yudoge  阅读(745)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩