• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 劍指offer打卡|二叉搜索樹與雙向鏈表

    標簽: 劍指

    題目描述

    輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。

    代碼

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    import java.util.ArrayList;
    public class Solution {
        //要求不能創建任何新的結點,只能在原本樹的結構中進行指針指向的調整
        //利用一個list來存放中序遍歷的樹
        private ArrayList<TreeNode> list=new ArrayList<>();
        public TreeNode Convert(TreeNode pRootOfTree) {
            MidOrder(pRootOfTree);
            if(list.size()==0||list.size()==1){
                return pRootOfTree;
            }
            TreeNode root=null;
            TreeNode pre=null;
            TreeNode next=null;
            for(int i=0;i<list.size()-1;i++){
                //arraylsit不能用[i]遍歷,只能用get、set
                if(i==0){
                    //當前為鏈表的頭結點,其pre為null
                    root=list.get(i);
                    root.left=pre;
                    pre=root;
                    next=list.get(i+1);
                    root.right=next;
                }else{
                    next.left=pre;
                    pre=next;
                    next=list.get(i+1);
                    pre.right=next;
                }
            }
            //當前為尾結點,其next為null
            next.right=null;
            next.left=pre;
            return root;
        }
        private void MidOrder(TreeNode node){
            if(node==null){
                return;
            }
            if(node.left!=null){
                MidOrder(node.left);
            }
            list.add(node);
            if(node.right!=null){
                MidOrder(node.right);
            }
        }
    }
    
    

     

    版權聲明:本文為sinat_35738209原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/sinat_35738209/article/details/103931898

    智能推薦

    二叉搜索樹與雙向鏈表(劍指OFFER 面試題36)

    題目描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 思路 在二叉樹中,每個節點都有兩個指向子節點的指針。在雙向鏈表中,每個節點也有兩個指針,分別一個指向前一個指向后。由于這兩種結構相似,同時二叉搜索樹也是一中排序的數據結構,因此,理論上可以實現搜索二叉樹和雙向鏈表的轉換。 在搜索二叉樹中,左子節點的值總是小于父節點的值,右子...

    劍指offer-二叉搜索樹與雙向鏈表

    題目描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 思路: 這道題真沒想到該怎么做,思路比較混亂 看完CYC大神的才會做...

    劍指offer 二叉搜索樹與雙向鏈表

    1.題目 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 來源:劍指offer 鏈接:https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&rp=1&ru=/ta/coding-interv...

    《劍指Offer》36. 二叉搜索樹與雙向鏈表

    題目鏈接 牛客網 題目描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 解題思路...

    36劍指offer 二叉搜索樹與雙向鏈表

    題目描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 由于要求轉換成一個排序的雙向鏈表,因為二叉搜索樹的中序遍歷就是有序的,因此遍歷過程中可以使用中序遍歷。 分析與解法:  首先 我們知道:在二叉樹中,每個結點都有兩個指向子結點的指針。在雙向鏈表中,每個結點也有兩個指針,它們分別指向前一個結點和后一個結點。...

    猜你喜歡

    劍指offer-題27:二叉搜索樹與雙向鏈表

    題目描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。 實驗平臺:牛客網 解決思路: java: python:...

    3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習

    3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習 3D游戲編程與設計——游戲對象與圖形基礎章節作業與練習 自學資源 作業內容 1、基本操作演練【建議做】 天空盒的制作: 地圖的制作: 整體效果: 2、編程實踐 項目要求: 項目結構: 代碼詳解: Actions: ISSActionCallback.cs SSAction.cs SSAction...

    FlycoTabLayout 的使用

    FlycoTabLayout 一個Android TabLayout庫,目前有3個TabLayout SlidingTabLayout:參照PagerSlidingTabStrip進行大量修改. 新增部分屬性 新增支持多種Indicator顯示器 新增支持未讀消息顯示 新增方法for懶癌患者 CommonTabLayout:不同于SlidingTabLayout對ViewPager依賴,它是一個不...

    爬蟲項目實戰八:爬取天氣情況

    爬取天氣情況 目標 項目準備 接口分析 代碼實現 效果顯示 寫入本地 目標 根據天氣接口,爬取接下來一周的天氣情況。 項目準備 軟件:Pycharm 第三方庫:requests,BeautifulSoup,csv 接口地址:http://api.k780.com:88/?app=weather.future&weaid=城市名&appkey=10003&sign=b59bc...

    關于web項目的目錄問題

    先給段代碼: 上面這個代碼一直出錯,我不知道原因,后面不停的查找資料發現了問題:我的web項目輸出目錄有問題,因為我也是第一次用idea寫web項目,發現很多bug 其實都沒有太大問題,我們需要注意的是你必須在out這個輸出文件夾中擁有這個文件,out輸出文件夾會默認過濾這些文件...

    精品国产乱码久久久久久蜜桃不卡