问答题 设i是一棵按后序遍历方式构成的线索二叉树的根结点指针,试设计一个非递归的算法,把一个地址为x的新结点插到t树中已知地址为y的结点右侧作为结点y的右孩子,并使插入后的二叉树仍为后序线索二叉树。【东北大学1996七(15分)】
【正确答案】正确答案:在线索二叉树上插入结点,破坏了被插入结点的线索。因此,插入结点时,必须修复线索。在结点y的右侧插入结点x,因为是后序线索树,要区分结点y有无左子树的情况。本题假定y结点无右子树。核心语句段如下: if(y一>ltag==0) //y有左子女 {p=y一>lchild; if(p一>rtag==1)p一>rchild=x; //x是y的左子女的后序后继 x一>ltag=1 ; x一>lchild=p; //x的左线索是y的左子女 } else //y无左子女 {x一>ltag=1 ; x一>lchild=y一>1child; //y的左线索成为x的左线索 if(y一>1child一>rtag==1) //若y的后序前驱的右标记为1 y一>1child一>rchild=x; //则将y的后序前驱的后继改为x } x一>rtag=1 ; x一>rchild=y;y一>rtag=0 ; y一>rchild=x; //x作y的右子树
【答案解析】