问答题 假设二叉树采用链接存储结构进行存储,t指向根结点,s所指结点为任意一个给定的结点,编写一个求出从根结点到p所指结点之间路径的函数。
【正确答案】本题采用非递归后序遍历树t,当后序遍历访问到s所指结点时,stack中所有结点均为p所指结点的祖先,由这些祖先便构成了一条从根结点到p所指结点之间的路径。 实现本题功能的程序代码如下: int path(BTNode *t,BTNode *s) { BTNode *stack[MaxSize]; BTNode *p; int i,flag,top=-1; //栈指针置初值 do { while(t) //将t的所有左结点入栈 { ++top; stack[top]=t; t=t→left; } p=NULL; //p指向当前结点的前一个已访问的结点 flag=1; //设置t的访问标记为已访问过 while(top!=1 && flag) { t=stack[top]; //取出当前的栈顶元素 if(t→right==p) //右子树不存在或已被访问,访问之 { if(t==s) //要访问的结点为要找的结点 { for(i=0;i<=top;++i) cout<<stack[i]→data<<" "; return 1; } else { --top; p=t; //p指向已被访问的结点 } } else { t=t→right; //t指向右子树 flag=0; //设置未被访问的标记 } } } while(top!=-1); return 0; }
【答案解析】