[英]Binary Search Tree Find minimum not clear
def min_tree_value(self):
while self.left:
self.left = self.left.left
return self.data
def min_tree_value(self):
if self.left is None:
return self.data
return self.left.min_tree_value()
實際的 Python 程序邏輯是遞歸形式的。 我在 While loop() 中嘗試了相同的邏輯
我不確定我的邏輯是否正確。 請幫助我找出不正確的邏輯並指出我錯了。
您的邏輯幾乎就在那里,但不完全是:
def min_tree_value(self):
node = self
while node.left:
# don't change the structure by rebinding node.left,
# but iterate the tree by moving along nodes!
node = node.left
return node.data
請注意,在原始代碼中,您永遠不會在返回 self 值之前重新分配self
,因此您總是返回根值。
首先,問題詢問如何在二叉樹中找到最小元素。
您使用的算法將在二叉搜索樹中找到最小元素(因為最左邊的元素是最小值)。
要在簡單的二叉樹中找到最小元素,請使用以下算法:
# Returns the min value in a binary tree
def find_min_in_BT(root):
if root is None:
return float('inf')
res = root.data
lres = find_min_in_BT(root.leftChild)
rres = find_min_in_BT(root.rightChild)
if lres < res:
res = lres
if rres < res:
res = rres
return res
OP更改問題后對答案的補充:
您嘗試的算法的邏輯是正確的,在實現中進行了小修正: self = self.data
。 他們都找到了最左邊的元素。
我還測試了返回相同 output 的兩個函數:
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def insert(self, data):
if self.data:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def findval(self, lkpval):
if lkpval < self.data:
if self.left is None:
return str(lkpval)+" Not Found"
return self.left.findval(lkpval)
elif lkpval > self.data:
if self.right is None:
return str(lkpval)+" Not Found"
return self.right.findval(lkpval)
else:
print(str(self.data) + ' is found')
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
def min_tree_value_original(self):
if self.left is None:
return self.data
return self.left.min_tree_value_original()
def min_tree_value_custom(self):
while self.left:
self = self.left
return self.data
root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)
root.insert(3)
root.insert(1)
root.insert(0)
root.insert(-1)
root.insert(-2)
print(root.min_tree_value_original())
print(root.min_tree_value_custom())
Output:
-2
-2
這里 -2 是 BST 中最小和最左邊的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.