求中序遍历
提交数: 221, 通过率: 36.65%, 平均分: 63.17
题目描述:
已知一棵二叉树用邻接表( 数组模拟 )结构存储,查找该二叉树中值为x的结点,在按中序输出的序列中排第几个?
输入格式:
第一行n为二叉树的结点个树,n<=100;以下第一列数据是各结点的值,第二列数据是左儿子结点编号,第三列数据是右儿子结点编号。最后一行x表示要查找的结点的值。
输出格式:
一个数m即在中序序列中的位置,如果有多个则输出最小的一个编号,找不到输出“NO”。
样例输入:
7 5 2 3 12 4 5 10 0 0 29 0 0 15 6 7 8 0 0 23 0 0 15
样例输出:
4
提示:
1)在树中如果找到多个值一样的节点,那么输出编号最小的节点。
2)注意输出NO的情况。
请完善下列程序:
def midorder( root ):
global num, p
if p != -1 : return
if tree[ root ][1] != -1:
midorder( tree[root][1] )
if tree[ root ][2] != -1:
midorder( tree[root][2] )
n = int(input())
tree = []; num = 0; p = -1
for i in range( n ):
v, le, ri = map( int, input().split() )
tree.append( [ v, le-1, ri-1 ] )
x = int( input() )
midorder( 0 )
if p != -1: print( p )
else: print( "NO" )
时间限制: 1000ms空间限制: 256MB
来源: 原创