劍指offer66二叉搜尋樹和雙向鍊錶

2021-10-18 04:09:53 字數 1148 閱讀 4159

題目雖然短短的兩行字,但真心不簡單(哭)。這道題的關鍵是二叉搜尋樹樹的中序遍歷

首先什麼是二叉搜尋樹呢?就是根的左子樹的值全部小於根節點的值,根的右子樹的值全部大於根節點的值(遞迴下去,其左子樹與右子樹也滿足該性質)巧的是二叉搜尋樹的中序遍歷是遞增的,剛好滿足題目的排序要求(這就很棒)。

解題三部曲 先排序,再雙向鍊錶,最後迴圈。

排序: 節點應從小到大排序,用中序遍歷即可解決

雙向鍊錶:(將left當做前驅,right當做後繼) 在構建相鄰節點(設前驅節點 prev,當前節點 cur (兩個千萬別衝突prev和cur是我們建立的用來方便連線的)關係時,不僅應pre.right = cur,也應cur.left = pre

結合下面來理解

最開始

更新第乙個前驅

更新第乙個後繼

3. 迴圈鍊錶: 設煉表頭節點head和尾節點tail,則應構建head.left = tailtail.right = head

class

solution

prev=cur;

inorder

(cur.right);}

public node treetodoublylist

(node root)

//找尾

while

(tail.right!=null)

//連線頭和尾

head.left=tail;

tail.right=head;

return head;

}}

劍指offer 66道 跳台階

時間限制 1秒 空間限制 32768k 熱度指數 373877 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 與斐波那契數列思想一樣,同樣使用迴圈代替遞迴,時間複雜度為o n coding utf 8 class sol...

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 二叉搜尋樹和雙向鍊錶

題目 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解答 利用二叉樹的中序遍歷,找到第乙個訪問的結點 利用標誌位first 用head記...