1 Star 1 Fork 0

bywuuu/pyTest

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
二叉搜索树的第k个节点.py 2.06 KB
一键复制 编辑 原始数据 按行查看 历史
bywuuu 提交于 2019-12-15 17:40 . debug
# 给定一棵二叉搜索树,请找出其中的第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))
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/bywuuu/pyTest.git
[email protected]:bywuuu/pyTest.git
bywuuu
pyTest
pyTest
master

搜索帮助