eri
tI
tHeap
fi
dkleast
umbersi
avectorvoidFi
dKLeastNumbersco
stvectori
tdataI
tHeapleastNumbersu
sig
edi
tkleastNumbersclearifk0datasizekretur
vectori
tco
st_iteratoriterdatabegi
foriterdatae
diteriflesstha
k
umberswasi
sertedi
toleastNumbersifleastNumberssizekleastNumbersi
sertiterleastNumbersco
tai
sk
umbersa
ditsfull
owelsefirst
umberi
leastNumbersisthegreatesto
eavectorofdatakleast
umbersoutput
fI
tHeapiteratoriterFirstleastNumbersbegi
ifislesstha
thepreviousgreatest
umberifiterleastNumbersbegi
replacethepreviousgreatest
umberleastNumberseraseiterFirstleastNumbersi
sertiter
06判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:861057911因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序列,比根结点小的元素都应该位于序列的左半部分从第一个大于跟结点开始到跟结点前面的一个元素为;止,所有元素都应该大于跟结点,因为这部分元素对应的是树的右子树。根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。参考代码:
usi
g
amespacestdVerifywhetherasque
ceofi
tegersarethepostordertraversalofabi
arysearchtreeBSTI
putsque
cethesque
ceofi
tegersle
gththele
gthofsque
ceRetur
retur
tureifthesque
ceistraversalresultofaBSTotherwiseretur
false
fboolverifySque
ceOfBSTi
tsque
cei
tle
gthifsque
ceNULLle
gth0retur
falserootofaBSTisatthee
dofpostordertraversalsque
cei
trootsque
cele
gth1the
odesi
leftsubtreearelesstha
therooti
ti0forile
gth1iifsque
ceirootbreakthe
odesi
therightsubtreearegreatertha
therooti
tjiforjle
gth1jifsque
cejrootretur
falseverifywhethertheleftsubtreeisaBSTboollefttrueifir