二叉树的数据结构

二叉树的二叉链表的数据结构

typedef struct BTNode
{
	elementType data;
	struct BTNode *LChild,*RChild;
}BiTnode,*BTree;

data,lchild,rchild分别存储结点的元素及左右指针域。

 

二叉树创建递归算法

int CreateBTree(BTree *BT)
{
	scanf(&ch);
	if(ch == '#')
	{
		BT = NULL;	
	}
	else{
		if(!(BT = (BiTNode*)malloc(sizeof(BiTNode))))
		{
			printf("没有足够的空间!\n");
			return -1;
		}
		BT->data = ch;
		CreateBTree(BT->LChild);
		CreateBTree(BT->RChild);
	}
	return 0;
}

二叉树创建非递归算法

typedef char elemtype;
struct bitree
{
	elemtype data;
	bitree *lchild,*rchild;
};
bitree *create()
{
	bitree *q[100];//定义q数组作为队列存放二叉链表中结点,100为最大值
	bitree *s;//二叉链表中的结点
	bitree *root;//二叉链表的根指针
	int front = 1,rear = 0;//定义队列的头、尾指针
	char ch;
	root = NULL;
	cin >> ch;
	while(ch!='#')
	{
		s = NULL;
		if(ch != ',')//输入数据不为逗号,表示不为虚节点,否则为虚节点
		{
			s = new bitree;
			s -> data = ch;
			s -> lchild = NULL;
			s -> rchild = NULL;
		}
		rear++;
		q[rear]=s;//新结点或虚节点进队
		if(rear == 1)
		{
			root = s;
		}else{
			if((s != NULL) && (q[front] != NULL))
			{
				if(rear % 2 == 0)
				{
					q[font] -> lchild = s;//rear 为偶数,s为双亲左孩子
				}else{
					q[front]->rchild = s; //rear为奇数,s为双亲右孩子
				}
				if(rear % 2 == 1)//出队
				{
					front++;
				}
			}
			cin >> ch;
		}
		return root;		
	}
}

二叉树的操作

1、建立一颗空二叉树:InitialBTree(BT)

初始化条件:无

操作结果:构造一颗空树BT。

2、按某种规则建立一颗二叉树:CreateBTree(BT)

初始条件:无

操作结果:按某种规则构造一颗二叉树BT。

3、求二叉树BT的树根结点:RootBTree(BT)

初始条件:二叉树BT已存在;

操作结果:返回二叉树BT的根结点。

4、求二叉树BT中结点p的双亲:ParentBTree(BT,p)

初始条件:二叉树BT已经存在,且p是二叉树BT中的一个结点;

操作结果:若结点p不是二叉树BT的根结点,则返回结点p的双亲结点;否则,返回NULL。

5、求二叉树BT中结点p的左孩子结点:LeftChildBTree(BT,p)

初始化条件:二叉树BT已经存在,且p是二叉树BT中的一个结点;

操作结果:若结点p不是二叉树BT的叶子结点,则返回结点p的左孩子结点;否则,返回NULL。

6、求二叉树BT中结点p的右孩子结点了;RightChildBTree(BT,p)

初始化条件:二叉树BT已经存在,且结点p是二叉树BT中的一个结点;

操作结果:若结点p不是二叉树BT的叶子结点,则返回结点p的右孩子结点,否则返回NULL;

7.判断二叉树BT是否为空:EmptyBTree(BT)

初始条件:二叉树BT已经存在;

操作结果:若二叉树BT为空,则返回TRUE;否则,返回false。

8、求二叉树BT的深度:DepthBTree(BT)

初始化条件:二叉树BT已经存在:

操作结果:返回二叉树BT的深度。

9、将结点p作为二叉树BT中结点q的左子树插入:InsertLeftBTree(BT,p,q)

初始条件:二叉树BT已经存在,且结点q是二叉树BT中的结点;

操作结果:将结点p作为二叉树BT中结点q的左子树插入。

10、将结点p作为二叉树BT中结点q的右子树插入:InsertLeftBTree(BT,p,q)

初始条件:二叉树BT已经存在,且结点q是二叉树BT中的结点;

操作结果:将结点p作为二叉树BT中结点q的右子树插入。

11、在二叉树BT中删除结点p的左子树:DeleteLChBTree(BT,p)

初始化条件:二叉树BT已经存在,结点p是二叉树BT中的结点;

操作结果:在二叉树BT中删除结点p的左子树。

12、在二叉树BT中删除结点p的右子树:DeleteLChBTree(BT,p)

初始化条件:二叉树BT已经存在,结点p是二叉树BT中的结点;

操作结果:在二叉树BT中删除结点p的右子树。

13、给二叉树BT中结点p赋值:AssignNodeBTree(T,p,x)

初始条件:二叉树BT已经存在,且结点p是二叉树BT中的结点。

操作结果:将x赋值给二叉树BT中的结点p。

14、求二叉树BT中结点p的左子树:GetLChBTree(BT,p)

初始条件:二叉树BT已经存在,结点p是二叉树BT中的结点;

操作结果:若p是非叶子结点,则返回结点p的左子树,否则返回NULL。

15、求二叉树BT中结点p的右子树:GetLChBTree(BT,p)

初始条件:二叉树BT已经存在,结点p是二叉树BT中的结点;

操作结果:若p是非叶子结点,则返回结点p的右子树,否则返回NULL。

16、按前序遍历方式遍历二叉树BT:PreOrderTraverseBTree(BT)

初始化条件:二叉树BT已经存在;

操作结果:按前序遍历方式遍历二叉树BT,返回前序遍历序列。

17、按中序遍历方式遍历二叉树BT:InOrderTraverseBTree(BT)

初始化条件:二叉树BT已经存在;

操作结果:按中序遍历方式遍历二叉树BT,返回中序遍历序列。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值