iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实题演练二叉搜索树与双向链表分析
  • 604
分享到

Java实题演练二叉搜索树与双向链表分析

Java二叉搜索树Java双向链表 2022-12-08 20:12:13 604人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录二叉搜索树与双向链表知识点-二叉树递归知识点-二叉搜索树思路代码二叉搜索树与双向链表 OJ链接 二叉树搜索树与双向链表 描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双

二叉搜索树与双向链表

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 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二叉搜索树与双向链表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实题演练二叉搜索树与双向链表分析

本文链接: https://www.lsjlt.com/news/174246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实题演练二叉搜索树与双向链表分析
    目录二叉搜索树与双向链表知识点-二叉树递归知识点-二叉搜索树思路代码二叉搜索树与双向链表 OJ链接 二叉树搜索树与双向链表 描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双...
    99+
    2022-12-08
    Java二叉搜索树 Java双向链表
  • java二叉搜索树使用实例分析
    本篇内容主要讲解“java二叉搜索树使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java二叉搜索树使用实例分析”吧!概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性...
    99+
    2023-06-29
  • C++二叉搜索树实例分析
    本篇内容介绍了“C++二叉搜索树实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!独一无二的二叉搜索树Given an integer&...
    99+
    2023-06-19
  • C++简单实现与分析二叉搜索树流程
    目录二叉搜索树二叉搜索树的重要操作二叉搜索树实现(key模型)二叉搜索树的应用二叉搜索树的实现(key/value模型)二叉搜索树 二叉搜索树又被称为二叉排序树。它可以是一个空树,如...
    99+
    2024-04-02
  • C++如何将二叉搜索树转换成双向循环链表(双指针或数组)
    目录二叉搜索树转换成双向循环链表二叉搜索树与双向链表(C++中等区)解题思路代码展示二叉搜索树转换成双向循环链表 本文解法基于性质:二叉搜索树的中序遍历为 递增序列 。 将二叉搜索...
    99+
    2024-04-02
  • Java数据结构之二叉搜索树实例分析
    这篇文章主要介绍“Java数据结构之二叉搜索树实例分析”,在日常操作中,相信很多人在Java数据结构之二叉搜索树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之二叉搜索树实例分析”的疑...
    99+
    2023-06-30
  • Java字符串,数组及二叉搜索树实例分析
    本文小编为大家详细介绍“Java字符串,数组及二叉搜索树实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java字符串,数组及二叉搜索树实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。题目一&nbs...
    99+
    2023-06-29
  • JavaScript二叉搜索树构建操作实例分析
    本篇内容介绍了“JavaScript二叉搜索树构建操作实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是二叉搜索树二叉搜索树首先它...
    99+
    2023-07-02
  • Java数据结构超详细分析二叉搜索树
    目录1.搜索树的概念2.二叉搜索树的简单实现2.1查找2.2插入2.3删除2.4修改3.二叉搜索树的性能 1.搜索树的概念 二叉搜索树是一种特殊的二叉树,又称二叉查找树,二叉排序树,...
    99+
    2024-04-02
  • Java二叉搜索树增、插、删、创的示例分析
    小编给大家分享一下Java二叉搜索树增、插、删、创的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!①概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有...
    99+
    2023-06-29
  • 前端算法leetcode109题解有序链表转换二叉搜索树
    目录题目解题思路-基础代码实现解题思路-优化代码实现解题思路-进阶代码实现题目 题目地址 给定一个单链表的头节点  head ,其中的元素 按升序排序&...
    99+
    2024-04-02
  • C++实现LeetCode(109.将有序链表转为二叉搜索树)
    [LeetCode] 109.Convert Sorted List to Binary Search Tree 将有序链表转为二叉搜索树 Given a singly linked...
    99+
    2024-04-02
  • C++数据结构二叉搜索树的实现应用与分析
    目录概念二叉搜索树的实现基本框架二叉搜索树的插入二叉搜索树的查找二叉搜索树的删除(重点)二叉搜索树的应用二叉树性能分析总结⭐️博客代码已上传至gitee:https://gitee....
    99+
    2024-04-02
  • 剑指Offer之Java算法习题精讲链表与二叉树专项训练
    题目一 链表题——反转链表 根据单链表的头节点head来返回反转后的链表 具体题目如下 解法 class Solution { public Li...
    99+
    2024-04-02
  • C++使用LeetCode实现二叉搜索树的示例分析
    这篇文章将为大家详细讲解有关C++使用LeetCode实现二叉搜索树的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Given an integer n, generate all st...
    99+
    2023-06-20
  • 剑指Offer之Java算法习题精讲二叉树与链表
    题目一  解法 class Solution { public boolean isBalanced(TreeNode root) { if(root...
    99+
    2024-04-02
  • 剑指Offer之Java算法习题精讲字符串与二叉搜索树
    题目一 字符串题——查找重复子字符串 根据给定的字符串按照指定条件判断是都可以通过子串多次构成 具体题目如下 解法 class Solution { ...
    99+
    2024-04-02
  • 剑指Offer之Java算法习题精讲二叉搜索树与数组查找
    题目一  解法 class Solution { int ans; int pre; public int minDiffInBST(TreeNode...
    99+
    2024-04-02
  • Java分治法与二分搜索算法实例分析
    本文实例讲述了Java分治法与二分搜索算法。分享给大家供大家参考,具体如下:1、分治法分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的...
    99+
    2023-05-30
    java 分治法 二分搜索
  • 剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树
    题目一  解法 class Solution { public String reverseOnlyLetters(String s) { char[]...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作