题目:

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

二叉树节点的定义如下:

struct BinaryTreeNode
{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;
}

实现代码:


void ConvertNode(BinaryTreeNode* pRoot, BinaryTreeNode*& pLastNodeInList)
{if (nullptr == pRoot) return;BinaryTreeNode* pCurNode = pRoot;if (pCurNode->m_pLeft != nullptr) ConvertNode(pCurNode->m_pLeft, pLastNodeInList); // 处理左子树pCurNode->m_pLeft = pLastNodeInList;if (pLastNodeInList != nullptr) pLastNodeInList->m_pRight = pCurNode;pLastNodeInList = pCurNode;if (pCurNode->m_pRight != nullptr) ConvertNode(pCurNode->m_pRight, pLastNodeInList); // 处理右子树
}BinaryTreeNode* Convert(BinaryTreeNode* pRoot)
{if (nullptr == pRoot) return nullptr;BinaryTreeNode* pLastNodeInList = nullptr; // 双线链表的尾节点ConvertNode(pRoot, pLastNodeInList);BinaryTreeNode* pHeadNodeInList = pLastNodeInList; // 双向链表的头节点while (pHeadNodeInList->m_pLeft != nullptr) pHeadNodeInList = pHeadNodeInList->m_pLeft; // 回缩到链表头return pHeadNodeInList;
}

27. 二叉搜索树与双向链表(C++版本)相关推荐

  1. 面试题27.二叉搜索树与双向链表

    题目:输入一颗二叉搜索树,将该二叉搜索树转换为一个排序的双向链表.要求不能创建 任何新的结点,只能调整树种结点指针的指向.比如输入下图的二叉搜索树,则输出转换 后的双向排序链表. 1 10 2 / \ ...

  2. 剑指offer面试题[27]-二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /* struct TreeNode {int val;struct Tr ...

  3. 【剑指offer-Java版】27二叉搜索树与双向链表

    二叉排序树转双向链表:又是一个不是很懂的递归,原理很懂,代码很懂,自己写就需要写很久 需要多画画图,多在脑子里面模拟一下递归过程,缺乏此类训练 这个递归练习也是理解Java值传递和引用传递机制的极好分 ...

  4. 【重点】剑指offer——面试题27:二叉搜索树与双向链表

    剑指offer--面试题27:二叉搜索树与双向链表 Solution1: 这是书上的代码,要理解好最近几道题,对指针的操作比较多... class Solution { public:TreeNode ...

  5. [二叉树]二叉搜索树转换为双向链表(剑指Offer26)

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  6. 【IT笔试面试题整理】二叉搜索树转换为双向链表

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  7. java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表

    1.请说明一下EJB的几种类型分别是什么? EJB(Enterprise JavaBean)是J2EE服务器端的组件模型,EJB包括会话Bean(Session Bean).实体Bean(Entity ...

  8. 剑指offer:面试题36. 二叉搜索树与双向链表

    题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: ...

  9. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

  10. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

最新文章

  1. vscode 全项目替换_利用vscode插件提升前端国际化开发效率
  2. 简单计算机病毒黑屏,教大家一个黑屏小程序
  3. 贝叶斯优化的初步理解
  4. docker mysql sock_docker mysql安装
  5. 如何在内核里面查找某些结构体或者宏的定义
  6. 社区论坛行业搜索最佳实践
  7. C#lock语句用法(lock到底有什么用?)
  8. C#LeetCode刷题之#119-杨辉三角 II(Pascal‘s Triangle II)
  9. nginx 403 Forbidden
  10. 如何查看并杀死僵尸进程?
  11. python函数使用说明
  12. 这么简单!安卓手机投屏到电脑的神器
  13. 基于51单片机的多线程操作系统设计
  14. MATLAB数字图像示例题目
  15. linux vi 替换
  16. SQL group by和count
  17. usermode linux网络空间,(RHCE笔记)linux基础之三 用户、组及权限
  18. 资讯_计算机屏幕_镜面屏;
  19. 自定义控件从入门到轻生之---解锁新姿势
  20. RHCSA (二) —— 常用简单命令Linux文件类型目录操作命令文件操作命令

热门文章

  1. 手持终端的时候应该有数据线
  2. 一次完整的react hooks实践
  3. Socket封装之聊天程序(二)
  4. 四层与七层负载均衡的比较
  5. react-router 4v 路由嵌套问题
  6. Linux shell脚本基础学习(上)
  7. 使用VC获取字符串的长度
  8. 3.PHP核心技术与最佳实践 --- PHP网络技术及应用(cURL,socket,SMTP,WebService,Cookie,Session,localStorage)
  9. 118. PHP 性能问题
  10. 36. Element length 属性