[英]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.