目錄
1、用兩個棧來實現乙個佇列,完成佇列的push和pop操作。
2、棧的壓入、彈出序列
思路:3、包含min函式的棧
思路:c++解答
python解答
4、二叉搜尋樹的後序遍歷序列
5、按之字形順序列印二叉樹
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
# -*- coding:utf-8 -*-
class solution:
def __init__(self):
self.stack1, self.stack2 = ,
def push(self, node):
# write code here
def pop(self):
# return xx
if self.stack2:
return self.stack2.pop()
if not self.stack1:
return -1
while self.stack1:
return self.stack2.pop()
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
new乙個棧,將pushv逐步入棧,隨時比較棧頂元素。
# -*- coding:utf-8 -*-
class solution:
def ispoporder(self, pushv, popv):
# write code here
stack =
index = 0
for item in pushv:
while stack and stack[-1] == popv[index]:
stack.pop()
index += 1
if stack==:
return true
else:
return false
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式。(時間複雜度應為o(1))
對於時間複雜度的要求,所以需要在棧的每乙個過程中,都可以實時判斷得出最小元素。所以下面第乙個做法不對。
常見做法,新增乙個輔助棧,存放最小元素。
此外,比較巧妙的做法還有每次在確認新入棧value值為最小值時,先將當前(即新min_val入棧前)的最小value入棧儲存,再更新最小值,然後新value入棧。如做法2。
先將當前最小value儲存的意義在於,pop時上乙個value出去後可以及時更新當前最小值。
# -*- coding:utf-8 -*-
class solution:
def __init__(self):
self.arr =
def push(self, node):
# write code here
def pop(self):
# write code here
return self.arr.pop()
def top(self):
# write code here
return self.arr[-1]
def min(self):
# write code here
return min(self.arr)
class solution
s.push(value);
}void pop()
else
s.pop();
}int top()
int min()
};
同思路
import sys
max_value = sys.maxsize
min_value = - sys.maxsize - 1
全部解答
# -*- coding:utf-8 -*-
import sys
class solution:
def __init__(self):
self.stack =
self.min_val = sys.maxsize
def push(self, node):
# write code here
if node < self.min_val:
self.min_val = node
else:
def pop(self):
# write code here
if self.stack[-1]==self.min_val:
self.stack.pop()
self.min_val = self.stack[-1]
self.stack.pop()
else:
self.stack.pop()
def top(self):
# write code here
return self.stack[-1]
def min(self):
# write code here
return self.min_val
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。
二叉搜尋樹的中序遍歷結果為從小到大的排列
# -*- coding:utf-8 -*-
class solution:
def verifysquenceofbst(self, sequence):
# write code here
if not sequence:
return false
root = sequence[-1]
i = 0
while i < len(sequence)-1:
if sequence[i]>root:
break
i += 1
for j in range(i,len(sequence)-1):
if sequence[j]0:
left = self.verifysquenceofbst(sequence[:i])
if i > len(sequence)-1:
right = self.verifysquenceofbst(sequence[i:len(sequence)-1])
return left&right
請實現乙個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
def print(self, proot):
ans =
if not proot:
return ans
def helper(node, level):
if len(ans) == level:
if level%2 == 0:
else:
ans[level].insert(0, node.val)
if node.left:
helper(node.left, level+1)
if node.right:
helper(node.right, level+1)
helper(proot,0)
return ans
劍指offer 棧相關
回歸一下基本概念 python 實現棧 例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 思路 借用乙個輔助的棧,遍歷壓棧順序,先將第乙個放入棧中,這裡是1,然後判斷棧...
棧和佇列 劍指offer
題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的 min函式。class solution def init self self.elem def push self,node def pop self return self.elem.pop def top self return...
《劍指offer》 佇列和棧
一 兩個棧實現乙個佇列 題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 用乙個棧來存,另乙個棧出。需要考慮的情況如下 class solution int pop else if stack1.size 0 出隊 res stack2.top sta...