本文实例讲述了python实现查找二叉搜索树第k大的节点功能。分享给大家供大家参考,具体如下:
题目描述
给定一个二叉搜索树,找出其中第k大的节点
就是一个中序遍历的过程,不需要额外的数组,便利到节点之后,k减一就行。
代码1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
class treenode:
def __init__( self , x):
self .val = x
self .left = none
self .right = none
class solution:
def __init__( self ):
self .k = 0
def recursionkthnode( self , root):
result = none
if result = = none and root.left:
result = self .recursionkthnode(root.left)
if result = = none:
if self .k = = 1 :
return root
self .k - = 1
if result = = none and root.right:
result = self .recursionkthnode(root.right)
return result
def kthnode( self , root, k):
if root = = none:
return none
self .k = k
return self .recursionkthnode(root)
root = treenode( 5 )
root.left = treenode( 3 )
root.left.left = treenode( 2 )
root.left.right = treenode( 4 )
root.right = treenode( 7 )
root.right.left = treenode( 6 )
root.right.right = treenode( 8 )
print (solution().kthnode(root, 3 ).val)
|
output : 4
代码2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class treenode:
def __init__( self , x):
self .val = x
self .left = none
self .right = none
class solution:
def __init__( self ):
self .k = 0
def inorder( self , root):
ans = none
if root:
if ans = = none and root.left:
ans = self .inorder(root.left) #往左遍历
if ans = = none and self .k = = 1 :
ans = root #遍历到目标节点
if ans = = none and self .k ! = 1 : #没有遍历到目标节点,k--
self .k - = 1
if ans = = none and root.right: #往右遍历
ans = self .inorder(root.right)
return ans
def kthnode( self , root, k):
if root = = none or k < = 0 :
return none
self .k = k
return self .inorder(root)
|
希望本文所述对大家python程序设计有所帮助。
原文链接:https://blog.csdn.net/weixin_36372879/article/details/84951091