[说明] 假设二叉树采用连接存储结构进行存储,root 指向根接点,p 所指结点为任一给定的结点,编写一个求从根结点到p所指结点之间路径的函数。
void path (root, p)
btree * root, * p;
Btree *stack[m0], *s;
int tag[m0], top =0, i, find =0;
s =root;
do
while (s ! = NULL)
stack [top] = s;
tag[top] =0;
( (1) )
if (top >0)
( (2) )
if (tag[top] = =1)
if( (3) )
for (i=1; i< =top; i+ + printf ("%d" ,stack[i]- >data);
find=1;
else top - -;
if( (4) )
p=p- >right;
( (5) )
while (find || (s! = NULL && top ! =0));
参考答案:s=s->left;
(2)s=stack [top];
(3)(s==p)
(4)(top>0 && ! find)
(5)tag [top]=1
解析:试题三
[解答要点] 本题采用非递归后序遍历数root,当后序遍历访问到p所指结点时,此时stack中所有的结点均为P所指结点的祖先,由这些祖先便构成了一条从根结点到p所指结点之间的路径。