平衡二叉树的创建(C语言)

平衡二叉树的创建

  1. 第一种情况,需要将2作为根节点,进行顺时针旋转;
    在这里插入图片描述
//平衡二叉树 右旋(顺时针)
struct TreeNode *AVL_Right(struct TreeNode *p)
{
   
	struct TreeNode *q = p -> lchild;
	p -> lchild = q -> rchild;
	q -> rchild = p;
	return q;
}

2.第二种情况,需要将2作为根节点,进行逆时针旋转;
在这里插入图片描述

//平衡二叉树 左旋(逆时针)
struct TreeNode *AVL_Left(struct TreeNode *p)
{
   
	struct TreeNode *q = p -> rchild;
	p -> rchild = q -> lchild;
	q -> lchild = p;
	return q;
}

3.第三种情况,首先需要将1作为根节点,进行逆时针旋转,再将2作为根节点,进行顺时针旋转;
在这里插入图片描述

//平衡二叉树 左旋右旋(逆时针,顺时针)
struct TreeNode *AVL_Left_Right(struct TreeNode *p)
{
   
	p -> lchild = AVL_Left(p -> lchild);
	return AVL_Right(p);
	
}

4.第四种情况,首先需要将3作为根节点,进行顺时针旋转,再将2作为根节点,进行逆时针旋转;
在这里插入图片描述

//平衡二叉树 右旋左旋(顺时针,逆时针)
struct TreeNode *AVL__Right__Left(struct TreeNode *p)
{
   
	p -> rchild = AVL_Left(p -> rchild);
	return AVL_Left(p);
}

完整代码

#include<stdio.h>
#include<stdlib.h>

struct TreeNode
{
   
	char data;
	struct TreeNode *lchild,*rchild;
};
//先序遍历
void PreNode(struct
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值