У меня есть общее дерево, которое может выглядеть следующим образом:
![Tree Image](https://i.stack.imgur.com/GM9sT.png)
Я хочу написать функцию MyFunc (tree, tree_element), который вернет родителя элемента.Но не непосредственный родитель, а родитель, который находится ровно на один уровень ниже корня.В случае прикрепленного дерева:
MyFunc(tree,'Dasani')
вернет 'Coke', а:
MyFunc(tree,'Zero Sugar')
вернет 'Pepsi'
Я смог написать двафункции.Первый возвращает непосредственного родителя:
class tree:
def __init__(self, key):
self.data = key
self.left = None
self.right = None
def parent_search(self, root, child_node):
if root :
if root.left and root.left.data== child_node:
return root.data
if root.right and root.right.data== child_node:
return root.data
elif root:
return self.parent_search(root.left, child_node) or self.parent_search(root.right, child_node)
root = tree('Beverage')
root.left = tree('Pepsi')
root.right = tree('Coke')
root.left.left = tree('Zero Sugar')
root.left.right = tree('Cherry Pepsi')
root.right.left = tree('Sport Drinks')
root.right.left.left = tree('Powerade')
root.right.left.right = tree('Dasani')
root.right.left.left.left = tree('Powerade w/Sugar')
print(root.parent_search(root,'Dasani'))
Второй возвращает весь путь вплоть до корня:
def printAncestors(root, target):
if root == None:
return False
if root.data == target:
return True
if (printAncestors(root.left, target) or
printAncestors(root.right, target)):
print root.data,
return True
return False
printAncestors(root, 'Dasani')
Однако мне нужно что-то промежуточное, что вернет только одинэлемент, который находится ровно на один уровень ниже корня.Я могу рассчитать высоту дерева от рассматриваемого листа до корня.Тогда я думал вернуть элемент, который имеет высоту 1 над листом, но не уверен, что это правильный подход.