平衡二叉树的创建
- 第一种情况,需要将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