27. 二叉搜索树与双向链表(C++版本)
题目:
输入一颗二叉搜索数,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
二叉树节点的定义如下:
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++版本)相关推荐
- 面试题27.二叉搜索树与双向链表
题目:输入一颗二叉搜索树,将该二叉搜索树转换为一个排序的双向链表.要求不能创建 任何新的结点,只能调整树种结点指针的指向.比如输入下图的二叉搜索树,则输出转换 后的双向排序链表. 1 10 2 / \ ...
- 剑指offer面试题[27]-二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /* struct TreeNode {int val;struct Tr ...
- 【剑指offer-Java版】27二叉搜索树与双向链表
二叉排序树转双向链表:又是一个不是很懂的递归,原理很懂,代码很懂,自己写就需要写很久 需要多画画图,多在脑子里面模拟一下递归过程,缺乏此类训练 这个递归练习也是理解Java值传递和引用传递机制的极好分 ...
- 【重点】剑指offer——面试题27:二叉搜索树与双向链表
剑指offer--面试题27:二叉搜索树与双向链表 Solution1: 这是书上的代码,要理解好最近几道题,对指针的操作比较多... class Solution { public:TreeNode ...
- [二叉树]二叉搜索树转换为双向链表(剑指Offer26)
[试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...
- 【IT笔试面试题整理】二叉搜索树转换为双向链表
[试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...
- java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表
1.请说明一下EJB的几种类型分别是什么? EJB(Enterprise JavaBean)是J2EE服务器端的组件模型,EJB包括会话Bean(Session Bean).实体Bean(Entity ...
- 剑指offer:面试题36. 二叉搜索树与双向链表
题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: ...
- 【剑指offer】二叉搜索树转双向链表,C++实现
原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...
- 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...
最新文章
- vscode 全项目替换_利用vscode插件提升前端国际化开发效率
- 简单计算机病毒黑屏,教大家一个黑屏小程序
- 贝叶斯优化的初步理解
- docker mysql sock_docker mysql安装
- 如何在内核里面查找某些结构体或者宏的定义
- 社区论坛行业搜索最佳实践
- C#lock语句用法(lock到底有什么用?)
- C#LeetCode刷题之#119-杨辉三角 II(Pascal‘s Triangle II)
- nginx 403 Forbidden
- 如何查看并杀死僵尸进程?
- python函数使用说明
- 这么简单!安卓手机投屏到电脑的神器
- 基于51单片机的多线程操作系统设计
- MATLAB数字图像示例题目
- linux vi 替换
- SQL group by和count
- usermode linux网络空间,(RHCE笔记)linux基础之三 用户、组及权限
- 资讯_计算机屏幕_镜面屏;
- 自定义控件从入门到轻生之---解锁新姿势
- RHCSA (二) —— 常用简单命令Linux文件类型目录操作命令文件操作命令
热门文章
- 手持终端的时候应该有数据线
- 一次完整的react hooks实践
- Socket封装之聊天程序(二)
- 四层与七层负载均衡的比较
- react-router 4v 路由嵌套问题
- Linux shell脚本基础学习(上)
- 使用VC获取字符串的长度
- 3.PHP核心技术与最佳实践 --- PHP网络技术及应用(cURL,socket,SMTP,WebService,Cookie,Session,localStorage)
- 118. PHP 性能问题
- 36. Element length 属性