Python實現查詢二叉搜尋樹第k大的節點功能示例

2022-09-26 18:45:19 字數 1813 閱讀 4669

題目描述

給定乙個二www.cppcns.com叉搜尋樹,找出其中第k大的節點

就是乙個中序遍歷的過程,不需要額外的陣列,便利到節點之後,k減一就行。

**1class 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

**2class 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 sel程式設計客棧f.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)

遞迴實現 查詢二叉樹刪除

在通過非遞迴方式實現查詢二叉樹的刪除後,感覺遞迴實現查詢二叉樹非常高大上,體會到遞迴的優勢。public treenode2 findmin treenode2 node else return node public int compareto int a,int b public treenod...

python實現二叉搜尋樹

二叉搜尋樹 binary search tree 又名二叉排序樹 binary sort tree 二叉搜尋樹是具有有以下性質的二叉樹 1 若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2 若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。3 左 右子樹也分別為二...

二叉查詢樹python實現

1.二叉查詢樹的定義 左子樹不為空的時候,左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點,左右子樹分別為二叉查詢樹 2.二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右子樹的結點直到為空為止...