问答题
设一棵二叉树的结点定义为
struct BinTreeNode{
ElemType data;BinTreeNode*leftchild,*rightchild;)现采用输入广义表表示建立二叉树。具体规定如下:
(1)树的根结点作为由子树构成的表的表名放在表的最前面。
(2)每个结点的左子树和右子树用逗号隔开。若仅有右子树没有左子树,逗号不能省略。
(3)在整个广义表表示输入的结尾加上一个特殊的符号(例如“#”)表示输入结束。例如,对于如右图所示的二叉树,其广义表表示为A(B(G)),E(G),C(F)。此算法的基本思路是:依次从保存广义表的字符串ls中输入每个字符。若遇到的是字母(假设以字母作为结点的值),则表示是结点的值,应为它建立一个新的结点,并把该结点作为左子女(当k=1)或右子女(当k=2)链接到其双亲结点上。若遇到的是左括号“(”,则表明子表的开始,将k置为1;若遇到的是右括号“)”,则表明子表结束。若遇到的是逗号“,”,则表示以左子女为根的子树处理完毕,应接着处理以右子女为根的子树,将k置为2。在算法中使用了一个栈s,在进入子表之前,将根结点指针进栈,以便括号内的子女链接之用。在子表处理结束时退栈。相关的栈操作如下: