题目如下:
根据二叉树中序遍历的非递归算法,在二叉树t查找值为x的元素,若找到且其左子树为空,则将值为y的元素插入成为其左孩子,否则若其右孩子为空,则将y插入成为其右孩子。插入失败,返回值为0,否则返回值为1。
相关代码如下:
int inserttree(BiTree &T, TElemType x, TElemType y)
{
SqStack S;
int top = -1;
BiTree s[50];
BiTree p = T, q, m;
InitStack(S);
while (p || top != -1)
{
if (p != NULL)
{
s[++top] = p; //根结点进栈
p = p->lchild; //根结点进栈,遍历左子树
}
else
{
q = s[top--]; //退栈
if (q->data == x) //寻找到值为x的结点
{
if (q->lchild && q->rchild)
return 0;
m = new BiTNode;
m->data = y;
m->lchild = NULL;
m->rchild = NULL;
if (q->lchild == NULL)
q->lchild = m;
else
q->rchild = m;
}
p = q->rchild; //遍历右子树
}
}
return 1;
}
其中相关类型的申明如下:
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
typedef BiTree SElemType; //栈元素类型
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
本文探讨了如何使用非递归算法在二叉树中基于中序遍历查找值为x的元素。如果找到该元素且其左子树为空,将值y作为其左孩子插入;若右子树为空,y则成为右孩子。插入失败则返回0,成功返回1。
1030





