问答题 [说明]
对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个节点,且每个节点仅访问一次的过程。函数InOrder()借助栈实现二叉树的非递归中序遍历运算。
设二叉树采用二叉链表存储,节点类型定义如下:
typedef struct BtNode {
ElemType data; /*节点的数据域,ElemType的具体定义省略*/
struct BtNode *lchild, *rchild; /*节点的左、右孩子指针域*/
} BtNode, *BTree;
在函数InOrder()中,用栈暂存二叉树中各个节点的指针,并将栈表示为不含头节点的单向链表(简称链栈),其节点类型定义如下:
typedef struct StNode { /*链栈的节点类型*/
BTree elem; /*栈中的元素是指向二叉链表节点的指针*/
struct StNode *link;
} StNode;
假设从栈顶到栈底的元素为e n ,e n -1 ,…,e 1 ,则不含头节点的链栈示意图如下图所示。
【正确答案】
【答案解析】ptr!=NULL q→link=stacktop ptr=ptr→lchild
stacktop=stacktop→link q→rchild