日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode 255. Verify Preorder Sequence in Binary Search Tree

發布時間:2025/3/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode 255. Verify Preorder Sequence in Binary Search Tree 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

驗證一個list是不是一個BST的preorder traversal sequence。

Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree.

You may assume each number in the sequence is unique.

Follow up:
Could you do it using only constant space complexity?

?

觀察這個例子: [8, 3, 1, 6, 4, 7, 10, 14, 13],

8, 3, 1 這三個連續遞減的數說明從root開始我們一直在往左邊走,直到出現6。

6應該是3的right child,因為他比3大,但是比8小。這時min這個指標應該等于3。也就是說之后list中的所有數都不能小于3。因為6是3的right child,說明3的本身和他的左子樹已經遍歷完畢,之后的所有數都應該比3大。

然后又是下降,直到出現7。這時應該將min更新為6。之后所有的數都應該大于6。以此類推。我們要做的是維護一個stack。如果elem < min, return False。如果elem < stack[-1], 把elem push進stack。如果elem > stack[-1], 那么pop出stack中比elem小的那些數字,并更新min。具體的步驟看:

min = -MaxInt

8,

8, 3,

8, 3, 1

8, 6??? min = 3

8, 6, 4,

8, 7 min = 6

10, min = 8

14, min = 10

14, 13

?

1 class Solution(object): 2 def verifyPreorder(self, preorder): 3 """ 4 :type preorder: List[int] 5 :rtype: bool 6 """ 7 stack = [] 8 min = -0x7FFFFFFF 9 for elem in preorder: 10 if elem < min: 11 return False 12 while stack and stack[-1] < elem: 13 min = stack.pop() 14 stack.append(elem) 15 return True

?

Follow Up: 如何驗證postorder和midorder?

A: 中序排列是遞增數列。

postorder的順序是left-right-root,那么這個例子應該是[1, 4, 7, 6, 3, 13, 14, 10, 8]

比較容易的方式是從root開始驗證,由于后續root再后面,我們可以先把list reverse一下。然后思路和上面差不多,只不過要遞減改為遞增。記錄min改成記錄max。

?

轉載于:https://www.cnblogs.com/lettuan/p/6247229.html

總結

以上是生活随笔為你收集整理的Leetcode 255. Verify Preorder Sequence in Binary Search Tree的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。