二叉搜索樹(shù)與鏈表

題目描述:

輸入一棵二叉搜索樹(shù),將該二叉搜索樹(shù)轉(zhuǎn)換成一個(gè)排序的雙向鏈表。要求不能創(chuàng)建任何新的結(jié)點(diǎn),只能調(diào)整樹(shù)中結(jié)點(diǎn)指針的指向。

代碼實(shí)現(xiàn):

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
//解題思路:
//1.將左子樹(shù)構(gòu)造成雙鏈表,并返回鏈表頭節(jié)點(diǎn)。
//2.定位至左子樹(shù)雙鏈表最后一個(gè)節(jié)點(diǎn)。
//3.如果左子樹(shù)鏈表不為空的話,將當(dāng)前root追加到左子樹(shù)鏈表。
//4.將右子樹(shù)構(gòu)造成雙鏈表,并返回鏈表頭節(jié)點(diǎn)。
//5.如果右子樹(shù)鏈表不為空的話,將該鏈表追加到root節(jié)點(diǎn)之后。
//6.根據(jù)左子樹(shù)鏈表是否為空確定返回的節(jié)點(diǎn)。
public class Solution {
    // 記錄子樹(shù)鏈表的最后一個(gè)節(jié)點(diǎn),終結(jié)點(diǎn)只可能為只含左子樹(shù)的非葉節(jié)點(diǎn)與葉節(jié)點(diǎn)
    TreeNode leftLast = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
    //public TreeNode Convert(TreeNode root) {
        if(pRootOfTree == null)
            return null;
        if(pRootOfTree.left == null&&pRootOfTree.right == null){
            leftLast = pRootOfTree;// 最后的一個(gè)節(jié)點(diǎn)可能為最右側(cè)的葉節(jié)點(diǎn)
            return pRootOfTree;
        }
        // 1.將左子樹(shù)構(gòu)造成雙鏈表,并返回鏈表頭節(jié)點(diǎn)
        TreeNode left = Convert(pRootOfTree.left);
        // 3.如果左子樹(shù)鏈表不為空的話,將當(dāng)前root追加到左子樹(shù)鏈表
        if(left!=null){
            leftLast.right = pRootOfTree;
            pRootOfTree.left = leftLast;
        }
        leftLast = pRootOfTree;// 當(dāng)根節(jié)點(diǎn)只含左子樹(shù)時(shí),則該根節(jié)點(diǎn)為最后一個(gè)節(jié)點(diǎn)
        // 4.將右子樹(shù)構(gòu)造成雙鏈表,并返回鏈表頭節(jié)點(diǎn)
        TreeNode right = Convert(pRootOfTree.right);
        // 5.如果右子樹(shù)鏈表不為空的話,將該鏈表追加到root節(jié)點(diǎn)之后
        if(right!=null){
            right.left = pRootOfTree; 
            pRootOfTree.right = right;
        }
        if (left != null) {
            return left;
        }
        return pRootOfTree;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • B樹(shù)的定義 一棵m階的B樹(shù)滿足下列條件: 樹(shù)中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,675評(píng)論 0 25
  • 四、樹(shù)與二叉樹(shù) 1. 二叉樹(shù)的順序存儲(chǔ)結(jié)構(gòu) 二叉樹(shù)的順序存儲(chǔ)就是用數(shù)組存儲(chǔ)二叉樹(shù)。二叉樹(shù)的每個(gè)結(jié)點(diǎn)在順序存儲(chǔ)中都有...
    MinoyJet閱讀 1,735評(píng)論 0 7
  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 第二章...
    SeanCheney閱讀 6,003評(píng)論 0 19
  • 原文鏈接 B樹(shù) 1.前言: 動(dòng)態(tài)查找樹(shù)主要有:二叉查找樹(shù)(Binary Search Tree),平衡二叉查找樹(shù)(...
    非典型程序員閱讀 1,258評(píng)論 0 3
  • 使用 LaTeX 渲染文本 原文:Text rendering With LaTeX 譯者:飛龍 協(xié)議:CC BY...
    布客飛龍閱讀 7,076評(píng)論 0 9

友情鏈接更多精彩內(nèi)容