LeetCode將有序陣列轉化為二叉搜尋樹--Java

三鑫 galaxy S7 edge(5G)發表於2020-12-20

一、將有序陣列轉化為二叉搜尋樹

題目

在這裡插入圖片描述
詳情連結:有序陣列轉二叉樹

二、使用步驟

1.解題思路

將當前陣列的中間值用於建立當前的節點,然後中間值左邊的數,分為一個新的子陣列,這裡我們暫且叫左子陣列,將右邊的分為右子陣列。將左子陣列放入當前節點的左子樹。右子樹組,放入當前節點的右子樹。重複上述步驟即可。

2.解題步驟

  1. 建立一個新的節點節點值為陣列的中位值 。
  2. 判斷當前子陣列大小是否為1。
    * 如果為1,則直接返回該節點。
    * 反之執行第三步。
  3. 判斷當前陣列的 (中間值得索引-1)>=0就是判斷當前節點是否存在左子樹
    * 如果大於0,建立一個新的陣列命名為左子陣列,值為當前陣列的中間值左邊的所有數值。然後將將左子陣列傳入當前函式執行。
    * 反之,則表明陣列越界。直接執行第四步
  4. 判斷當前陣列的**(中間值的索引是+1)<=當前陣列的長度** ,就是判斷當前節點是否存在右子樹。
    * 如果小於的話,建立一個新的陣列命名為右子陣列,值為當前陣列的中間值右邊的所有數值。然後將將右子陣列傳入當前函式執行。
    * 反之,執行第五步
  5. 返回當前節點。

程式碼

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        if(nums==null||nums.length==0){
            return null;
        }{
            return arrrayToBST(nums,0,nums.length-1);
        }
        
    }


    public TreeNode arrrayToBST(int[] nums,int start ,int end){
       int length=end-start+1;
        TreeNode root=new TreeNode(nums[start+length/2]);
        if(start==end){
            return root;
        }else {
           
            if(length/2-1>=0){
              
                root.left=arrrayToBST(nums,start,start+length/2-1);
            }
            if(length/2+1<=length-1){
             
                root.right=arrrayToBST(nums,start+length/2+1,end);
            }
            return root;
        }
    }
}

三、總結

樹的問題一般是通過遞迴和三種遍歷方式來解決。目前我所寫的很多樹的比較簡單的題目都是通過遞迴和樹的三種遍歷方式來實現的。

各位大佬們看完後覺得我寫得很差的的話,可以在評論去瘋狂踩踏我蹂躪我。但是最最為重要的事就是不要白嫖!!!!雖然我知道在看的各位都是白嫖黨!!!!

相關文章