[英]Finding parent node in binary search tree
我得到一個節點的答案為 0。 在打印搜索時,我能夠看到路徑,但是它沒有返回節點的數據。 以下是代碼:
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
class BinarySearchTree:
def __init__(self):
self.root=None
def insert(self,ele):
p=Node(ele)
if self.root is None:
self.root=p
return
q=self.root
while(q is not None):
if ele<=q.data:
if q.left is None:
q.left=p
return
else:
q=q.left
else:
if q.right is None:
q.right=p
return
else:
q=q.right
def inorder(self,x):
if x is not None:
self.inorder(x.left)
print(x.data,end='-')
self.inorder(x.right)
def preorder(self,x):
if x is not None:
print(x.data,end='-')
self.preorder(x.left)
self.preorder(x.right)
def postorder(self,x):
if x is not None:
self.postorder(x.left)
self.postorder(x.right)
print(x.data,end='-')
def father(self,x,ele):
if self.root is None:
return 'Tree Empty'
x=self.root
if ele==x.data:
return 'Root Node'
while (x is not None):
if x.left==ele or x.right==ele:
return x.data
if ele<=x.data:
x=x.left
else:
x=x.right
return 0
調用:
b=BinarySearchTree()
b.insert(45)
b.insert(41)
b.insert(79)
b.insert(90)
b.insert(10)
b.insert(88)
b.insert(92)
b.insert(19)
print('--------------------------------------')
print('Inorder Traversal :')
b.inorder(b.root)
print('\n------------------------------------')
print('\nPreorder Traversal :')
b.preorder(b.root)
print('\n------------------------------------')
print('\nPostorder Traversal :')
b.postorder(b.root)
print('\n------------------------------------')
ele=int(input('Enter element to find father of:'))
z=b.father(b.root,ele)
print('Father of '+str(ele)+' is '+str(z))
print('\n------------------------------------')
與元素比較時,我不能寫為x.left.data==ele or x.right.data==ele
。 有什么建議(考慮插入已正確實施)?
輸出片段是:
--------------------------------------
Inorder Traversal :
10-19-41-45-79-88-90-92-
------------------------------------
Preorder Traversal :
45-41-10-19-79-90-88-92-
------------------------------------
Postorder Traversal :
19-10-41-88-92-90-79-45-
------------------------------------
Enter element to find father of:88
Father of 88 is 0
-----------------------------------
答案應該是 90
45
/ \
41 79
/ \
10 90
\ / \
19 88 92
如果我理解正確, ele
是您在樹中搜索相應節點的值,因此您無法將其與left
節點或right
節點進行比較,因為它們的類型不同。 如果這是正確的,那么只需“取消引用”孩子:
def father(self,x,ele):
if self.root is None:
return 'Tree Empty'
x = self.root
if ele == x.data:
return 'Root Node'
while (x is not None):
node = x.left
if node.data == ele:
return x.data
node = x.right
return x.data
if ele <= x.data:
x = x.left
else:
x = x.right
此外,這似乎是通過調試器進行的微不足道的修復。 啟動pdb
並在father
內部設置一個斷點。 例如:
python -m pdb your_tree_script.py
-> <first executable line of your script output by pdb>
(Pdb) break <line number of first line in father function input by you>
...
請參閱pdb —可用命令的 Python 調試器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.