4

#yyds干货盘点# 面试必刷TOP101:二叉搜索树与双向链表

 2 years ago
source link: https://blog.51cto.com/u_15488507/5611344
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

#yyds干货盘点# 面试必刷TOP101:二叉搜索树与双向链表

精选 原创

97的风 2022-08-23 11:18:14 博主文章分类:面试题 ©著作权

文章标签 双向链表 二叉树 最小值 文章分类 Java 编程语言 阅读数202

1.简述:

描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示

#yyds干货盘点# 面试必刷TOP101:二叉搜索树与双向链表_最小值

数据范围:输入二叉树的节点数 ,二叉树中每个节点的值 要求:空间复杂度(即在原树上操作),时间复杂度 

1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构

4.你不用输出双向链表,程序会根据你的返回值自动打印输出

输入描述:

二叉树的根节点

返回值描述:

双向链表的其中一个头节点。

示例1
{10,6,14,4,8,12,16}
From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;
输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。
示例2
{5,4,#,3,#,2,#,1}
From left to right are:1,2,3,4,5;From right to left are:5,4,3,2,1;
5
/
4
/
3
/
2
/
1
树的形状如上图

2.代码实现:

public class Solution {
//返回的第一个指针,即为最小值,先定为null
public TreeNode head = null;
//中序遍历当前值的上一位,初值为最小值,先定为null
public TreeNode pre = null;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null)
//中序递归,叶子为空则返回
return null;
//首先递归到最左最小值
Convert(pRootOfTree.left);
//找到最小值,初始化head与pre
if(pre == null){
head = pRootOfTree;
pre = pRootOfTree;
}
//当前节点与上一节点建立连接,将pre设置为当前值
else{
pre.right = pRootOfTree;
pRootOfTree.left = pre;
pre = pRootOfTree;
}
Convert(pRootOfTree.right);
return head;
}
}
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK