剑指offer二十六之二叉搜索树与双向链表
2024-10-15 20:58:36
一、题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
二、思路
对二叉搜索树中序遍历的结果即为排序的结果,在中序遍历的过程中,建立双向指针。详细过程见代码注释。
三、代码
public class Solution { TreeNode tempHead = null; //
TreeNode realHead = null; //保存双向链表的头结点 public TreeNode Convert(TreeNode pRootOfTree) {
//如果头结点为空,返回null
if (pRootOfTree == null) {
return null;
} //转换
ConvertMethod(pRootOfTree); //返回双向链表的头结点
return realHead;
} //采用递归的方法进行中序遍历,遍历过程中,建立头结点和下一个节点的双向指针
public void ConvertMethod(TreeNode pRootOfTree) {
//递归遍历左节点
if (pRootOfTree.left != null) {
ConvertMethod(pRootOfTree.left);
} //建立根节点与下一个节点的双向指针
if(tempHead==null){ //第一次运行的时候,头结点为空,初始化头结点
tempHead=pRootOfTree;//用于记录当前头结点
realHead=pRootOfTree;//用于记录双向链表的头结点
}else { //第一次运行以后,建立tempHead节点与其下一个节点的双向指针
//建立当前头结点与下一个节点的双向指针
tempHead.right = pRootOfTree;
pRootOfTree.left = tempHead; tempHead = pRootOfTree; //当前头节点后移一位
} //递归遍历右节点
if (pRootOfTree.right != null) {
ConvertMethod(pRootOfTree.right);
} }
}
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null; public TreeNode(int val) {
this.val = val; } }
------------------------------------------------------
参考链接:https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5
最新文章
- centos 下测试网速
- maven Ubuntu14.04 安装
- Delphi XE的firemonkey获取当前文件所在路径的方法
- HttpWebRequest与HttpWebResponse使用例子(转)
- 开源软交换系统 FreeSwitch 与 Asterisk 比较
- Oracle SQL函数之日期函数
- Android SQLiteDatabase使用总结
- JavaScript面向对象编程(二)构造函数和类
- Cordova的搭建
- [译]ASP.NET Core 2.0 路由引擎
- 【转】教你开发jQuery插件
- 【Springboot】Springboot整合Thymeleaf模板引擎
- swoole 版本查看
- 分享一款Markdown的css样式
- .NET Core开发日志——Linux版本的SQL Server
- SQLServer 的case when语句使用实现统计
- 浅谈 Adaboost 算法
- matlab之simulink仿真入门
- 20145104张家明 《Java程序设计》第7周学习总结
- reflect 机制
热门文章
- 手机PC文件传输
- VS2010/MFC编程(对话框:模态对话框及其弹出过程)
- (二)spring-mvc-showcase 和 swagger-springmvc 的恩恩怨怨
- python socket.error: [Errno 10061]
- 一个用css写出来的下拉菜单
- 基于MATLAB的均值滤波算法实现
- java web 通过前台输入的数据(name-value)保存到后台 xml文件中
- MySQL中不允许使用列别名作为查询条件
- 【Win2D】【译】Win2D 快速入门
- Python学习-36.Python中的字典解释