代码拉取完成,页面将自动刷新
# 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 解法1:暴力法,直接遍历整棵树,然后在数组中依次弹出最小值即可
# 这样写,在我自己的机器上是没问题的,但是,网站上通不过,而且每次运行的结果还都不同,不知道是不是因为网站用的python2的原因
class Solution:
def __init__(self):
self.sol = []
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
# write code here
self.get_level(pRoot)
temp = None
self.sol.sort()
if k > 0:
temp = self.sol[k - 1]
return temp
def get_level(self, my_root):
if not my_root:
return None
else:
self.sol.append(my_root.val)
self.get_level(my_root.left)
self.get_level(my_root.right)
# 解法2:其实,就按照中序遍历就肯定是从小到大排列了
class Solution1:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
# write code here
# 第三个节点是4
# 前序遍历5324768
# 中序遍历2345678
# 后序遍历2436875
# 所以是中序遍历,左根右
global result
result = []
self.midnode(pRoot)
if k <= 0 or len(result) < k:
return None
else:
return result[k - 1]
def midnode(self, root):
if not root:
return None
self.midnode(root.left)
result.append(root)
self.midnode(root.right)
node1 = TreeNode(8)
node2 = TreeNode(6)
node3 = TreeNode(10)
node4 = TreeNode(5)
node5 = TreeNode(7)
node6 = TreeNode(9)
node7 = TreeNode(11)
node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
node3.left = node6
node3.right = node7
my_sol = Solution()
print(my_sol.KthNode(node1, 1))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。