最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實題演練二叉搜索樹與雙向鏈表分析

 更新時間:2022年12月05日 08:32:01   作者:敲代碼の流川楓  
這篇文章主要介紹了Java二叉搜索樹與雙向鏈表,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路

二叉搜索樹與雙向鏈表

OJ鏈接

二叉樹搜索樹與雙向鏈表

描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉(zhuǎn)換成一個排序的雙向鏈表。如下圖所示

數(shù)據(jù)范圍:輸入二叉樹的節(jié)點(diǎn)數(shù)0 \le n \le 10000≤n≤1000,二叉樹中每個節(jié)點(diǎn)的值0\le val \le 10000≤val≤1000

要求:空間復(fù)雜度O(1)O(1)(即在原樹上操作),時間復(fù)雜度O(n)O(n)

注意:

1.要求不能創(chuàng)建任何新的結(jié)點(diǎn),只能調(diào)整樹中結(jié)點(diǎn)指針的指向。當(dāng)轉(zhuǎn)化完成以后,樹中節(jié)點(diǎn)的左指針需要指向前驅(qū),樹中節(jié)點(diǎn)的右指針需要指向后繼

2.返回鏈表中的第一個節(jié)點(diǎn)的指針

3.函數(shù)返回的TreeNode,有左右指針,其實可以看成一個雙向鏈表的數(shù)據(jù)結(jié)構(gòu)

4.你不用輸出雙向鏈表,程序會根據(jù)你的返回值自動打印輸出

知識點(diǎn)-二叉樹遞歸

遞歸是一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解。因此遞歸過程,最重要的就是查看能不能講原本的問題分解為更小的子問題,這是使用遞歸的關(guān)鍵。

而二叉樹的遞歸,則是將某個節(jié)點(diǎn)的左子樹、右子樹看成一顆完整的樹,那么對于子樹的訪問或者操作就是對于原樹的訪問或者操作的子問題,因此可以自我調(diào)用函數(shù)不斷進(jìn)入子樹。

知識點(diǎn)-二叉搜索樹

二叉搜索樹是一種特殊的二叉樹,它的每個節(jié)點(diǎn)值大于它的左子節(jié)點(diǎn),且大于全部左子樹的節(jié)點(diǎn)值,小于它右子節(jié)點(diǎn),且小于全部右子樹的節(jié)點(diǎn)值。因此二叉搜索樹一定程度上算是一種排序結(jié)構(gòu)。

思路

二叉搜索樹最左端的元素一定最小,最右端的元素一定最大,符合“左中右”的特性,因此二叉搜索樹的中序遍歷就是一個遞增序列,我們只要對它中序遍歷就可以組裝稱為遞增雙向鏈表。

具體做法

定義兩個指針pCur和prev, pCur的當(dāng)前節(jié)點(diǎn)的指針, prev是pCur的前驅(qū)節(jié)點(diǎn)的指針, 因此只要pre不為空, 連接方案就是prev.right = pCur, pCur.left = prev

二叉樹中序遍歷的順序是左兒子->根節(jié)點(diǎn)->右兒子, 故我們只要按中序遍歷的順序移動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為當(dāng)前節(jié)點(diǎn)
    private void convertChild(TreeNode pCur){
        //遞歸出口
        if(pCur == null){
            return ;
        }
        //中序遍歷,先找到最左邊的節(jié)點(diǎn),并與prev建立連接
        convertChild(pCur.left);
        pCur.left = prev;
        if(prev != null){
            prev.right = pCur;
        }
        //prev更新
        prev = pCur;
        convertChild(pCur.right);
    }
}

到此這篇關(guān)于Java實題演練二叉搜索樹與雙向鏈表分析的文章就介紹到這了,更多相關(guān)Java二叉搜索樹與雙向鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring的編程式事務(wù)TransactionTemplate的用法詳解

    Spring的編程式事務(wù)TransactionTemplate的用法詳解

    TransactionTemplate提供了一種在代碼中進(jìn)行編程式事務(wù)管理的方式,使開發(fā)人員能夠在方法級別定義事務(wù)的開始和結(jié)束點(diǎn),本文介紹了Spring框架中TransactionTemplate的用法,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • java中Memcached的使用實例(包括與Spring整合)

    java中Memcached的使用實例(包括與Spring整合)

    這篇文章主要介紹了java中Memcached的使用實例(包括與Spring整合),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 關(guān)于springboot集成swagger及knife4j的增強(qiáng)問題

    關(guān)于springboot集成swagger及knife4j的增強(qiáng)問題

    這篇文章主要介紹了springboot集成swagger以及knife4j的增強(qiáng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 詳解Java如何簡化條件表達(dá)式

    詳解Java如何簡化條件表達(dá)式

    在復(fù)雜的實際業(yè)務(wù)中,往往會出現(xiàn)各種嵌套的條件判斷邏輯。隨著需求的增加,條件邏輯會變得越來越復(fù)雜。面對這種情況,簡化判斷邏輯就是不得不做的事情,下面為大家介紹幾種方法
    2022-06-06
  • java音樂播放器編寫源碼

    java音樂播放器編寫源碼

    這篇文章主要為大家詳細(xì)介紹了java音樂播放器的編寫源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot快速入門及起步依賴解析(實例詳解)

    SpringBoot快速入門及起步依賴解析(實例詳解)

    SpringBoot?是由?Pivotal?團(tuán)隊提供的全新框架,其設(shè)計目的是用來簡化?Spring?應(yīng)用的初始搭建以及開發(fā)過程,這篇文章主要介紹了SpringBoot快速入門及起步依賴解析,需要的朋友可以參考下
    2022-10-10
  • Windows下apache ant安裝、環(huán)境變量配置教程

    Windows下apache ant安裝、環(huán)境變量配置教程

    這篇文章主要介紹了Windows下apache ant安裝、環(huán)境變量配置教程,ANT的安裝很簡單,本文同時講解了驗證安裝是否成功的方法和使用方法實例,需要的朋友可以參考下
    2015-06-06
  • 詳解UDP協(xié)議格式及在java中的使用

    詳解UDP協(xié)議格式及在java中的使用

    這篇文章主要介紹了UDP協(xié)議格式及在java中的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Spring?AOP?創(chuàng)建代理對象詳情

    Spring?AOP?創(chuàng)建代理對象詳情

    這篇文章介紹了Spring?AOP?創(chuàng)建代理對象詳情,主要介紹AOP?創(chuàng)建代理對象和上下文相關(guān)的內(nèi)容,下文分享具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • springboot 如何通過SpringTemplateEngine渲染html

    springboot 如何通過SpringTemplateEngine渲染html

    通過Spring的Thymeleaf模板引擎可以實現(xiàn)將模板渲染為HTML字符串,而不是直接輸出到瀏覽器,這樣可以對渲染后的字符串進(jìn)行其他操作,如保存到文件或進(jìn)一步處理,感興趣的朋友跟隨小編一起看看吧
    2024-10-10

最新評論

永寿县| 大兴区| 余江县| 大港区| 威信县| 项城市| 鹿邑县| 罗江县| 巴中市| 沁水县| 陆丰市| 威海市| 名山县| 且末县| 富阳市| 绍兴县| 邮箱| 汝阳县| 娄烦县| 新密市| 绥宁县| 罗田县| 邮箱| 小金县| 大连市| 客服| 贡嘎县| 连州市| 邵阳县| 德令哈市| 贵南县| 油尖旺区| 峨眉山市| 阳城县| 黄冈市| 陇西县| 德令哈市| 宝清县| 都兰县| 确山县| 沁阳市|