1.题目描述
上图中的二叉树的叶子结点,按从左到右的顺序连成的单链表如下图所示:
2.解题思路
题目要求将叶子节点按自左向右的次序连接成一个单链表,因此很容易考虑到的便是将整棵二叉树按照先序或中序或后序的方式遍历一次。
在遍历的过程中对叶子节点单独判断,如果是叶子节点,则将其做一个标识(比如用额外的指针指向该节点),接着遍历下一个叶子节点,遍历到另一个叶子节点后,然后让已被标识的叶子节点的右孩子指向该节点,依次类推便可以实现将叶子节点连接成单链表。
————————————————
版权声明:本文为CSDN博主「法海你懂不」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013595419/article/details/51870361
下文使用先序遍历
3.代码实现
核心代码:
void leafLink(pnode root)
{
if(!root)
{
return;
}
if(NULL == root->left && NULL == root->right)
{
if(NULL == firstLeaf)
{
firstLeaf = root; // 保存找到的第一个叶子结点(k指针)
pcur = firstLeaf;
}
else
{
// 链接时用叶子结点的rchild域存放指针
pcur->right = root;
pcur = pcur->right;
}
}
if(root->left)
{
leafLink(root->left);
}
if(root->right)
{
leafLink(root->right);
}
}
参考:https://blog.csdn.net/haishu_zheng/article/details/79987599