欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

二叉搜索樹與雙向鏈表

OJ鏈接

二叉樹搜索樹與雙向鏈表

描述

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

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

要求:空間復(fù)雜度O(1)O(1)(即在原樹上操作),時(shí)間復(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.返回鏈表中的第一個(gè)節(jié)點(diǎn)的指針

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

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

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

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

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

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

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

思路

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

具體做法

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

二叉樹中序遍歷的順序是左兒子->根節(jié)點(diǎn)->右兒子, 故我們只要按中序遍歷的順序移動(dòng)prev和pCur指針, 就可以將整個(gè)二叉樹連接為一條雙向鏈表

代碼

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

相關(guān)文章

  • java中l(wèi)ambda表達(dá)式語法說明

    java中l(wèi)ambda表達(dá)式語法說明

    “Lambda 表達(dá)式”(lambda expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對應(yīng)于其中的lambda抽象(lambda abstraction),是一個(gè)匿名函數(shù),即沒有函數(shù)名的函數(shù)。Lambda表達(dá)式可以表示閉包(注意和數(shù)學(xué)傳統(tǒng)意義上的不同)。
    2016-09-09
  • java String類功能、原理與應(yīng)用案例【統(tǒng)計(jì)、判斷、轉(zhuǎn)換等】

    java String類功能、原理與應(yīng)用案例【統(tǒng)計(jì)、判斷、轉(zhuǎn)換等】

    這篇文章主要介紹了java String類功能、原理與應(yīng)用案例,結(jié)合實(shí)例形式詳細(xì)分析了java String類的基本功能、構(gòu)造方法,以及使用String類實(shí)現(xiàn)統(tǒng)計(jì)、判斷、轉(zhuǎn)換等功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Mac?M1安裝JDK的實(shí)戰(zhàn)避坑指南

    Mac?M1安裝JDK的實(shí)戰(zhàn)避坑指南

    這篇文章主要給大家介紹了關(guān)于Mac?M1安裝JDK避坑的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問題

    java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問題

    這篇文章主要介紹了java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問題。具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring Boot集成Ehcache緩存解決方式

    Spring Boot集成Ehcache緩存解決方式

    在本篇文章里小編給大家整理的是關(guān)于Spring Boot集成Ehcache緩存解決方式,需要的朋友們可以學(xué)習(xí)下。
    2019-12-12
  • 解讀RedisTemplate的各種操作(set、hash、list、string)

    解讀RedisTemplate的各種操作(set、hash、list、string)

    這篇文章主要介紹了解讀RedisTemplate的各種操作(set、hash、list、string),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue+springboot讀取git的markdown文件并展示功能

    vue+springboot讀取git的markdown文件并展示功能

    Markdown-it 是一個(gè)用于解析和渲染 Markdown 標(biāo)記語言的 JavaScript 庫,使用 Markdown-it,你可以將 Markdown 文本解析為 HTML 輸出,并且可以根據(jù)需要添加功能、擴(kuò)展語法或修改解析行為,本文介紹vue+springboot讀取git的markdown文件并展示,感興趣的朋友一起看看吧
    2024-01-01
  • idea 隱藏target,iml等不需要展示的文件(推薦)

    idea 隱藏target,iml等不需要展示的文件(推薦)

    這篇文章主要介紹了idea 隱藏target,iml等不需要展示的文件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 深入理解Spring Aop的執(zhí)行順序

    深入理解Spring Aop的執(zhí)行順序

    本文將結(jié)合實(shí)例代碼,介紹Spring Aop的執(zhí)行順序,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2021-06-06
  • mybatis清除一級緩存的幾種方式

    mybatis清除一級緩存的幾種方式

    這篇文章主要介紹了mybatis清除一級緩存的幾種方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論