求中序遍历

提交数: 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

来源: 原创