问题本质:对二叉树进行中序遍历,遍历一个节点就进行计数,计数达到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