<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Go 刷 LeetCode】一棵樹引發(fā)的算法題...

          共 1774字,需瀏覽 4分鐘

           ·

          2020-07-10 04:18

          點擊上方藍字關注加小星星?

          濤哥給你我所有~

          今天為大家講解 LeetCode 第 108 題,是一道簡單難度的題目。

          題目描述

          將一個按照升序排列的有序數(shù)組,轉換為一棵高度平衡二叉搜索樹。

          本題中,一個高度平衡二叉樹是指一個二叉樹每個節(jié)點 的左右兩個子樹的高度差的絕對值不超過 1。

          示例:

          給定有序數(shù)組: [-10,-3,0,5,9],

          一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜索樹:

          ??????0
          ?????/?\
          ???-3???9
          ???/???/
          ?-10??5

          來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree 著作權歸領扣網(wǎng)絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。

          解題思路

          這里,如果我們知道二叉樹的中序遍歷就是升序序列的話,那這道題就比較清晰了。(二叉樹是一種很重要的數(shù)據(jù)結構,不了解的朋友自行去學習一下哦:)

          選擇中間位置左邊的數(shù)字作為根節(jié)點,則根節(jié)點的下標 mid = (left + right) / 2

          5bab6ef07c6e73a87ec42dc2794e7c31.webp

          樹結構多用遞歸實現(xiàn)。

          代碼實現(xiàn)

          //?go
          //Definition?for?a?binary?tree?node.
          type?TreeNode?struct?{
          ?Val???int
          ?Left??*TreeNode
          ?Right?*TreeNode
          }

          func?sortedArrayToBST(nums?[]int)?*TreeNode?{
          ?return?helper(nums,?0,?len(nums)-1)
          }

          func?helper(nums?[]int,?left?int,?right?int)?*TreeNode?{
          ?if?left?>?right?{
          ??return?nil
          ?}
          ?mid?:=?(left?+?right)?>>?1?//?等同于(left?+?right)?/?2,位運算效率較高
          ??//?注意:go 中的位運算符優(yōu)先級高于加減,必須帶括號!
          ?root?:=?&TreeNode{Val:?nums[mid]}
          ?root.Left?=?helper(nums,?left,?mid-1)
          ?root.Right?=?helper(nums,?mid+1,?right)
          ?return?root
          }
          //?java
          class?Solution?{
          ????public?TreeNode?sortedArrayToBST(int[]?nums)?{
          ????????return?helper(nums,?0,?nums.length?-?1);
          ????}

          ????public?TreeNode?helper(int[]?nums,?int?left,?int?right)?{
          ????????if?(left?>?right)?{
          ????????????return?null;
          ????????}

          ????????//?總是選擇中間位置左邊的數(shù)字作為根節(jié)點
          ????????int?mid?=?left?+?right?>>?1;?//?Java?中的位運算符優(yōu)先級低于加減,可以不帶括號

          ????????TreeNode?root?=?new?TreeNode(nums[mid]);
          ????????root.left?=?helper(nums,?left,?mid?-?1);
          ????????root.right?=?helper(nums,?mid?+?1,?right);
          ????????return?root;
          ????}
          }

          這里另外多說一點,有個小坑。就是 Go 中的運算符優(yōu)先級和其他語言(如我所知的Java,C)有不一樣,搞不懂 Go 這里搞啥特殊,真是坑

          這里順便給出 Go 和 Java 的運算符優(yōu)先級表

          6d27247027954a4ab7333113aebc0944.webp5962d70e1bd46b5f725602b8bd6ebbe7.webp

          鄭重聲明:

          所展示代碼已通過 LeetCode 運行通過,請放心食用~


          推薦閱讀



          喜歡本文的朋友,歡迎關注“Go語言中文網(wǎng)

          Go語言中文網(wǎng)啟用信學習交流群,歡迎加微信274768166,投稿亦歡迎



          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丁香色婷婷五月天 | 日本精品综合网在线视频 | 欧美精选网页 | 国产69久久成人看精品 | 91三级在线 |