按照中序遍历的顺序遍历一颗二叉搜索树,则遍历序列的数值是递增排序的。只需要用中序遍历算法遍历一颗二叉搜索树,我们就很容易找出它的第K大节点。
python解法:
class solution:
def findkmax(self,head,k):
global num
if not head:
return
self.findkmax(head.left,k)
num=num+1
if num==k:
print(head.val)
self.findkmax(head.right,k)
def middleReadStack(self,head):
if head==None:
return
node=head
middlestack=[]
while middlestack or node:
while node:
middlestack.append(node)
node=node.left
node=middlestack.pop()
print(node.val)
node=node.right
def afterReadStack(self,head):
if head==None:
return
node=head
afterstack=[]
resstack=[]
while afterstack or node:
while node:
afterstack.append(node)
resstack.append(node)
node=node.right
node=afterstack.pop()
node=node.left
resstack=resstack[::-1]
for ii in resstack:
print(ii.val)