剑指offer——38二叉搜索树与双向链表
2024-09-02 13:14:39
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
题解:
在搜索二义树中,左子节点的值总是小于父节点的值,右子节点的值总是大于父节点的值。
因此,将二叉搜索树转换成排序双向链表时,
原先指向左子节点的指针调整为链表中指向前一个节点的指针,
原先指向右子节点的指针调整为链表中指向后一个节点的指针。
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode* head = nullptr;
ConvertNode(pRootOfTree, head);//返回的head为指向双链表的尾节点
while (head != nullptr && head->left != nullptr)//向前找到头节点
head = head->left;
return head;
}
void ConvertNode(TreeNode *cur, TreeNode *&pre)
{
if (cur == nullptr)return;
ConvertNode(cur->left, pre);//找到最左节点 cur->left = pre;//左节点指向比他更小的节点
if (pre != nullptr)pre->right = cur;//更小的右节点指向后一个节点 pre = cur;//然后更新双链表
ConvertNode(cur->right, pre);
}
};
最新文章
- Swift3.0语言教程字符串转换为数字值
- JS判断是否已经到达页面底部
- Android 主题和选择器
- errno 错误码
- java.lang.Runtime类总结 【转】
- rails 配置使用mysql
- Google Test Frame 简单使用例子
- CSS: inline-block的应用和float块高度塌陷
- 生成一个唯一token
- git入门(4)团队中git保管代码常用操作
- python之路3-元组、列表、字典、集合
- Oracle jdbc 连接
- fmt.printf输出的格式
- selenium js
- Hbase记录-Hbase shell使用
- Qt Widgets——动作类与小部件菜单项
- 关键词提取_textbank
- vue-cil 中的配置分析
- python模块——random模块(简单验证码实现)
- Bugzilla使用规范