Java实题演练二叉搜索树与双向链表分析
二叉搜索树与双向链表
OJ链接
描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示

数据范围:输入二叉树的节点数0 \le n \le 10000≤n≤1000,二叉树中每个节点的值0\le val \le 10000≤val≤1000
要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度O(n)O(n)
注意:
1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继
2.返回链表中的第一个节点的指针
3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构
4.你不用输出双向链表,程序会根据你的返回值自动打印输出

知识点-二叉树递归
递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这是使用递归的关键。
而二叉树的递归,则是将某个节点的左子树、右子树看成一颗完整的树,那么对于子树的访问或者操作就是对于原树的访问或者操作的子问题,因此可以自我调用函数不断进入子树。
知识点-二叉搜索树
二叉搜索树是一种特殊的二叉树,它的每个节点值大于它的左子节点,且大于全部左子树的节点值,小于它右子节点,且小于全部右子树的节点值。因此二叉搜索树一定程度上算是一种排序结构。
思路
二叉搜索树最左端的元素一定最小,最右端的元素一定最大,符合“左中右”的特性,因此二叉搜索树的中序遍历就是一个递增序列,我们只要对它中序遍历就可以组装称为递增双向链表。
具体做法
定义两个指针pCur和prev, pCur的当前节点的指针, prev是pCur的前驱节点的指针, 因此只要pre不为空, 连接方案就是prev.right = pCur, pCur.left = prev
二叉树中序遍历的顺序是左儿子->根节点->右儿子, 故我们只要按中序遍历的顺序移动prev和pCur指针, 就可以将整个二叉树连接为一条双向链表

代码
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null){
return null;
}
TreeNode head = pRootOfTree;
convertChild(pRootOfTree);
while(head.left!=null){
head = head.left;
}
return head;
}
TreeNode prev = null;
//pCur为当前节点
private void convertChild(TreeNode pCur){
//递归出口
if(pCur == null){
return ;
}
//中序遍历,先找到最左边的节点,并与prev建立连接
convertChild(pCur.left);
pCur.left = prev;
if(prev != null){
prev.right = pCur;
}
//prev更新
prev = pCur;
convertChild(pCur.right);
}
}到此这篇关于Java实题演练二叉搜索树与双向链表分析的文章就介绍到这了,更多相关Java二叉搜索树与双向链表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring的编程式事务TransactionTemplate的用法详解
TransactionTemplate提供了一种在代码中进行编程式事务管理的方式,使开发人员能够在方法级别定义事务的开始和结束点,本文介绍了Spring框架中TransactionTemplate的用法,感兴趣的朋友跟随小编一起看看吧2023-07-07
java中Memcached的使用实例(包括与Spring整合)
这篇文章主要介绍了java中Memcached的使用实例(包括与Spring整合),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
关于springboot集成swagger及knife4j的增强问题
这篇文章主要介绍了springboot集成swagger以及knife4j的增强,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-03-03
springboot 如何通过SpringTemplateEngine渲染html
通过Spring的Thymeleaf模板引擎可以实现将模板渲染为HTML字符串,而不是直接输出到浏览器,这样可以对渲染后的字符串进行其他操作,如保存到文件或进一步处理,感兴趣的朋友跟随小编一起看看吧2024-10-10


最新评论