62.二叉搜索树的第k个节点(python)

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。
 
思路:中序遍历
 1 class Solution:
 2     # 返回对应节点TreeNode
 3     def KthNode(self, pRoot, k):
 4         # write code here
 5         stack = []
 6         while stack or pRoot:
 7             if pRoot:
 8                 stack.append(pRoot)
 9                 pRoot = pRoot.left
10             else:
11                 pRoot=stack.pop()
12                 k-=1
13                 if k == 0:
14                     return pRoot
15                 pRoot=pRoot.right

2019-12-31 21:26:57

 1 class Solution:
 2     # 返回对应节点TreeNode
 3     def KthNode(self, pRoot, k):
 4         # write code here
 5         def preorder(pRoot):
 6             if pRoot == None:
 7                 return []
 8             return preorder(pRoot.left)+[pRoot]+preorder(pRoot.right)
 9         res = preorder(pRoot)
10         if len(res)<k or k < 1:
11             return None
12         return res[k-1]

递归版

 1 class Solution:
 2     # 返回对应节点TreeNode
 3     def __init__(self):
 4         self.count=0
 5     def KthNode(self, pRoot, k):
 6         # write code here
 7         if pRoot == None:
 8             return None
 9         node = self.KthNode(pRoot.left,k)
10         if node:
11             return node
12         self.count += 1
13         if self.count == k:
14             return pRoot
15         node = self.KthNode(pRoot.right,k)
16         if node:
17             return node
posted @ 2019-12-31 21:31  Assange  阅读(249)  评论(0编辑  收藏  举报