leetcode 230 二叉搜尋樹中第K小的元素 (python)
阿新 • • 發佈:2018-12-24
問題本質:對二叉樹進行中序遍歷,遍歷一個節點就進行計數,計數達到k的時候就結束。
方法一(遞迴):
class Solution(object):
def kthSmallest(self, root, k):
self.count=k
self.res=0
def core(root):
if root :
core(root.left)
self.count=self.count-1
if self.count==0 :
self.res=root.val
core(root.right)
core(root)
return self.res
參考:二叉樹的中序遍歷遞迴法
class Solution(object):
def inorderTraversal(self, root):
def core(root,res):
if root:
core(root.left,res)
res.append(root.val)
core(root.right,res)
res=[]
core(root,res)
return res
方法二(迴圈)
class Solution(object):
def kthSmallest(self, root, k):
stack=[]
while True:
if root:
stack.append(root)
root=root.left
else:
root=stack.pop()
k=k-1
if k==0:
return root.val
else:
root=root.right
對比參考:中序的迴圈寫法(結束條件不一樣)
class Solution(object):
def inorderTraversal(self, root):
stack=[]
res=[]
node=root
while node or len(stack)>0:
if node:
stack.append(node)
node=node.left
else:
node=stack.pop()
res.append(node.val)
node=node.right
return res