二叉树问题的解决方法

本文探讨了如何使用非递归算法在二叉树中基于中序遍历查找值为x的元素。如果找到该元素且其左子树为空,将值y作为其左孩子插入;若右子树为空,y则成为右孩子。插入失败则返回0,成功返回1。

题目如下:
根据二叉树中序遍历的非递归算法,在二叉树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;
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值