题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
 
题解:
  

  在搜索二义树中,左子节点的值总是小于父节点的值,右子节点的值总是大于父节点的值。

  因此,将二叉搜索树转换成排序双向链表时,

    原先指向左子节点的指针调整为链表中指向前一个节点的指针,

    原先指向右子节点的指针调整为链表中指向后一个节点的指针。

  

 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);
}
};

最新文章

  1. Swift3.0语言教程字符串转换为数字值
  2. JS判断是否已经到达页面底部
  3. Android 主题和选择器
  4. errno 错误码
  5. java.lang.Runtime类总结 【转】
  6. rails 配置使用mysql
  7. Google Test Frame 简单使用例子
  8. CSS: inline-block的应用和float块高度塌陷
  9. 生成一个唯一token
  10. git入门(4)团队中git保管代码常用操作
  11. python之路3-元组、列表、字典、集合
  12. Oracle jdbc 连接
  13. fmt.printf输出的格式
  14. selenium js
  15. Hbase记录-Hbase shell使用
  16. Qt Widgets——动作类与小部件菜单项
  17. 关键词提取_textbank
  18. vue-cil 中的配置分析
  19. python模块——random模块(简单验证码实现)
  20. Bugzilla使用规范

热门文章

  1. Git 设置和取消代理(SOCKS5代理)
  2. Django框架(二十五)—— Django rest_framework-路由控制与响应器
  3. git清理工作区
  4. redis 入门之哈希
  5. [轉]Linux 2.6内核笔记【内存管理】
  6. CentOS 7 安装 nginx1.15
  7. Java的部分问题和小结
  8. 浅谈Java/Android下的注解
  9. postgresql 数据库的备份和还原
  10. PHP-在排序数组中查找元素的第一个和最后一个位置