问答题 设一棵完全二叉树使用顺序存储结构存放在数组bt[L,n]中,请写出进行非递归的前序遍历算法。【西安电子科技大学1998年】
【正确答案】正确答案:二叉树的顺序存储是按完全二叉树的顺序存储格式,双亲与子女结点下标间有确定关系。对顺序存储结构的二叉树进行遍历,与二叉链表类似。在顺序存储结构下,判二叉树为空时,用结点下标大于n(完全二叉树)或0(对一般二叉树的“虚结点”)。本题是完全二叉树。算法的基本设计思想:从根结点开始,每访问一个结点,将其右孩子入栈,沿着左分支向下继续访问,当结点下标大于n时,判二叉树为空。然后依次退栈,继续循环访问。算法的代码: void PreOrder(ElemType bt,int n) { //对以顺序结构存储的完全二叉树bt进行前序遍历 in七top=O,s[]; //top是栈s的栈顶指针,栈容量足够大 while(i<=n || top>0) { while(i<=n) { printf(“%d”,bt[i]); //访问根结点 if(2*i+1<=n) s[++top]=2*i+1 ; //右子女的下标位置进栈 i=2*i; //沿左子女向下 } if(top>0) i=s[top一一]; //取出栈顶元素 } }//PreOrder
【答案解析】