題目描述
給定乙個二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.二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右子樹的結點直到為空為止...