My 劍指offer1 陣列查詢 重建二叉樹

2021-10-04 10:27:50 字數 2485 閱讀 6422

有乙個二維陣列(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

思路1:遍歷陣列

時間複雜度:o(m*n)

class

solution

:def

find

(self, target, array)

:#array二維列表

raw =

len(array)

#行數 col =

len(array[0]

)#列數

for i in

range

(raw)

:for j in

range

(col)

:# 如果目標值等於陣列中的值,則找到

if target == array[i]

[j]:

return

true

return

false

(錯誤思路:從左上角開始查詢是不可行,因為以左上角為基準遍歷時,要查詢的數字可能分布在兩側,所以不能很好的縮小搜尋範圍。)

思路2:以左下角或右上角開始查詢

時間複雜度:o(m+n) (行數+列數)

def

find2

(self, target, array)

: raw =

len(array)

col =

len(array[0]

)#以左下角為起點開始找

i = raw-

1 j =

0while

(i>=0)

and(j

:if target>array[i]

[j]:

j +=

1elif target

[j]:

i -=

1else

:return

true

return

false

另:對折查詢(以行列的中點開始判斷大小)、十字分割(從陣列整體的中點開始)

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。

前序遍歷:根→左→右

中序遍歷:左→根→右

思路1:遞迴重建

在前序序列中,第乙個元素a就是根節點;

此時在中序序列中,a的左邊(b、c)就是a的左孩子及其子節點,在a的右邊(d、e…i)就是a的右孩子及其子節點;

在前序序列中第二個是b,所以b就是a的左孩子;

而在中序序列,b的左邊c是b的左孩子及其子節點,在b的右邊(同是也在a的左邊)的就是b的右孩子及其子節點…

以此類推.這就是利用遞迴來重建二叉樹。

遞迴呼叫:將左子樹和右子樹分別再看成單獨一顆樹,將其前序遍歷序列、中序遍歷序列分別傳入到該函式中,便可得到左子樹的根結點、右子樹的根結點。此時需要用第一步得到的根結點連線它們;

遞迴呼叫的終止條件:直到傳入陣列為空,說明已經沒有節點,直接返回null。

:# 先定義樹的基本結構

def__init__

(self, x)

: self.val=x

self.left=

none

self.right=

none

class

solution

:def

reconstructbinarytree

(self, pre, tin):if

not pre or

not tin:

# 檢測有無中序和先序遍歷

return

none

root = treenode(pre[0]

) val = tin.index(pre[0]

)# .index可以查詢列表裡面值的下表

#遞迴呼叫

root.left = self.reconstructbinarytree(pre[

1:val+1]

, tin[

:val]

) root.right = self.reconstructbinarytree(pre[val+1:

], tin[val+1:

])return root

劍指offer 1 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。二維陣列是有序的,比如下面的資料 1 2 3 4 5 6 7 8 9可以直接利用左下角數字開始查詢 大於 比較...

劍指offer 1 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 首先是先模擬獲取隨機遞增陣列 public static int getarray int n,int m 初...

劍指Offer 1 二維陣列查詢

劍指offer 1 二維陣列查詢 馬上也要畢業開始找工作了,自己程式設計能力實屬弟弟,笨鳥先飛,雖然飛得好像也不早了,打算每天做一道吧,爭取暑假前做完。準備秋招了,目前就是在牛客網上做題為主 題目要求是這樣 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從...