linked-list - 将二叉树展平为带有旋转的链表
问题描述
我想展平二叉树并使用旋转将其转换为链表。我们应该有两种类型的链表,第一种是当所有节点都在左侧时,即:我们的树将只有左孩子,所有右孩子都将变为 NULL,我们将通过做这种类型的转换对所有具有右孩子的节点进行左旋转。第二种类型是一棵只有右孩子的树,左孩子设置为 NULL,我们通过对所有有左孩子的节点进行右旋转来进行这种转换。尽管我尝试了很多,但我不知道如何编写此转换的算法,我只需要此转换的算法或 C 中的代码。这是数据结构:
typedef struct Tib Type_Tib ;
typedef Type_Tib * Typestr_Tib ;
typedef int Type1_Tib ;
typedef bool Type2_Tib ;
struct Tib
{
Type1_Tib Champ1 ;
Type2_Tib Champ2 ;
};
Type1_Tib Struct1_Tib ( Typestr_Tib S)
{
return S->Champ1 ;
}
Type2_Tib Struct2_Tib ( Typestr_Tib S)
{
return S->Champ2 ;
}
void Aff_struct1_Tib ( Typestr_Tib S, Type1_Tib Val )
{
S->Champ1 = Val ;
}
void Aff_struct2_Tib ( Typestr_Tib S, Type2_Tib Val )
{
S->Champ2 = Val ;
}
/** Arbres de recherche binaire **/
typedef Typestr_Tib Typeelem_ATib ;
typedef struct Noeud_ATib * Pointeur_ATib ;
struct Noeud_ATib
{
Typeelem_ATib Val ;
Pointeur_ATib Fg ;
Pointeur_ATib Fd ;
Pointeur_ATib Pere ;
} ;
希望你能帮助我,因为我真的需要这个算法。
解决方案
推荐阅读
- twitter - 在哪里为 Twitter webhook 添加有效负载 URL?
- spring-boot - 当方法中发生错误时,会一次又一次地调用 JmsListener
- cassandra - 尝试在 Windows 10 上运行 Cassandra 时遇到一些奇怪的问题
- git - 如何从我没有强制推送权限的主分支中删除包含其历史记录的文件(删除历史记录很重要)?
- python - 是否有任何直接的方式/方法来验证推文是否存在?
- python - Discord.py:根据消息得到的反应来编辑机器人发送的消息
- python - Plotly Sankey 图表在存在循环时切断
- c - 没有返回变量的线程池
- python - 在哪里可以找到 googleapiclient 库中所有查询参数的文档?
- azure-devops - 在扩展模板中设置名称在 azure yaml 管道中不起作用