假设二叉树采用二叉链存储结构存储,设计一个算法,求出根结点到给定某结点之间的路径,要求:
问答题 给出算法的基本设计思想。
【正确答案】正确答案:算法的基本设计思想: 由二叉树非递归后序遍历的特点我们可以知道,当遍历到某一个结点时,栈中的所有结点都是该结点的祖先,而从栈底到栈顶正是从根节点到该结点的路径,所以在非递归后序遍历算法的基础上稍做修改就可完成。
【答案解析】
问答题 写出二叉树采用的存储结构代码。
【正确答案】正确答案:二叉树存储结构如下: typedef struct BiTNode{ ElemType data; //数据域 struct BiTNode *lchild,*rchild; //左、右孩子指针 }BTNode,*BiTree;
【答案解析】
问答题 根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
【正确答案】正确答案:算法的设计如下: #define MaxSize 100 int AncestoPath(BTNode*b, BTNode *s){ BTNode* st[MaxSize]; BTNode *P; int i,flag,top=—1; do{ while(b!=NULL){ st[++top]=b, b=b—>lchild; } p=NULL; //p指向当前结点的前一个已访问结点 flag=1; //设置b的访问标记为已访问 while(top!=一1 &&flag){ b=st[1top]; //取出栈顶元素 if(b—>rchiid==p){ //右子树不存在或已被访问,访问之 if(b==s){ //找到目标结点,输出路径 for(i=0;i<=top;++i) printf ("%c",st[i]—>data), return 1; } else{ top——; p=b; //p指向刚才访问的结点 } } eise{ b=b—>rchild, //b指向右子树 flag=0; //设置未被访问标记 } } }while(top!=一1); //栈不空时循环 return 0; //其他情况返回0 }
【答案解析】