📅  最后修改于: 2023-12-03 14:46:49.017000             🧑  作者: Mango
本题是SP大赛第二场的第二个问题,主要考察参赛者对于二叉树算法的掌握程度。题目要求在给定的二叉树中,找到符合条件的节点并输出其编号。
给定一棵二叉树,要求找到一个节点,它的值大于等于左儿子的值并且小于等于右儿子的值。其中,节点的编号是顺序遍历时的顺序。
输入:
7
2 3
4 5
0 0
0 6
1 0
0 0
0 0
5
输出:
5
# 根据题意建立二叉树
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(array):
nodes = {}
for i, val in enumerate(array):
if val == 0:
continue
nodes[i+1] = TreeNode(val)
for i, val in enumerate(array):
if val == 0:
continue
node = nodes[i+1]
left_index = val[0]
right_index = val[1]
if left_index != 0:
node.left = nodes[left_index]
if right_index != 0:
node.right = nodes[right_index]
return nodes[1]
# 找到符合条件的节点
def find_node(node, x):
if node is None:
return -1
if node.val >= x:
if node.left is not None and node.left.val <= x:
if node.right is None or node.right.val > x:
return node.val
left = find_node(node.left, x)
if left != -1:
return left
return find_node(node.right, x)
# 主函数
def main():
n = int(input())
array = []
for _ in range(n):
array.append(list(map(int, input().split())))
x = int(input())
root = build_tree(array)
print(find_node(root, x))
main()
代码片段采用markdown格式,并用代码块的形式展示。