二叉树的存储实现与遍历和左右旋转

简介: 二叉树的存储实现与遍历和左右旋转

AVL树结点的定义

1.  typedef int TElmType;
2.  typedef struct avl_node{
3.      TElmType data;
4.      struct avl_node* lchild;
5.      struct avl_node* rchild;
6.      int height;
7.  } AVLNode, *AVLTree;

产生一个结点

1.  AVLTree create_node(AVLElem data){
2.      AVLTree p;
3.      p=(AVLTree)malloc(sizeof( AVLNode));                 // void *  空指针为万能指针
4.      p->data=data;
5.      p->rchild=NULL;
6.      p->lchild=NULL;
7.      p->height=1;          //用于判断和矫正树的高度
8.      return p; 
9.}

实现前序遍历二叉树

1.  void pre_order(AVLTree root) {
2.          if (root != NULL) {
3.              printf("%d-", root->data);
4.              printf("(%d)",root->height);
5.              pre_order(root->lchild);
6.              pre_order(root->rchild);
7.          }
8.      }

右旋的实现

 

1.  static AVLTree right_rotation(AVLTree root){
2.      AVLTree z=root;
3.      AVLTree y=z->lchild;
4.      AVLTree T3=y->lchild;
5.      y->rchild=z;
6.      z->lchild=T3;
7.      z->height=max(get_height(z->lchild), get_height(z->rchild))+1;     //孩子的高度加一即为父子树的高度
8.      y->height=max(get_height(y->lchild), get_height(y->rchild))+1;
9.      return y;
10. }

左旋的实现

1.  static AVLTree left_rotation(AVLTree root){
2.      AVLTree z=root;
3.      AVLTree y=z->rchild;
4.      AVLTree T2=y->lchild;
5.      y->lchild=z;
6.      z->rchild=T2;                                                       // 将本来z->rchlid覆盖
7.      z->height=max(get_height(z->lchild), get_height(z->rchild))+1;     //孩子的高度加一即为父子树的高度
8.      y->height=max(get_height(y->lchild), get_height(y->rchild))+1;
9.      return y;
10. }

 

相关文章
|
6月前
二叉树查找值为x的结点、树的高度、第k层结点个数的代码实现
二叉树查找值为x的结点、树的高度、第k层结点个数的代码实现
【数据结构】单值二叉树 & 相同的树 & 翻转二叉树(五)
【数据结构】单值二叉树 & 相同的树 & 翻转二叉树(五)
47 0
33_把二叉搜索树转换为累加树
33_把二叉搜索树转换为累加树
|
19天前
二叉树的深度、路径总和、将有序数组转换为二叉搜索树、二叉搜索树迭代器(2022/02/23)
二叉树的深度、路径总和、将有序数组转换为二叉搜索树、二叉搜索树迭代器(2022/02/23)
7 0
|
30天前
【数据结构】翻转、平衡、对称二叉树,最大深度、判断两棵树是否相等、另一棵树的子树
【数据结构】翻转、平衡、对称二叉树,最大深度、判断两棵树是否相等、另一棵树的子树
28 0
|
6月前
|
测试技术
ONT60 旋转链表 思路分享
先将整个链表整体反转,再分别反转前k个和剩下的。
27 0
|
12月前
链表中的节点每k个一组翻转
链表中的节点每k个一组翻转
39 0
|
算法 安全
二叉树的基本操作(如何计算二叉树的结点个数,二叉树的高度)
二叉树的基本操作(如何计算二叉树的结点个数,二叉树的高度)
283 0
|
C++
【C++】AVL树的插入实现(详解旋转机制)
【C++】AVL树的插入实现(详解旋转机制)
114 0
二叉树的三种遍历方式
二叉树的三种遍历方式
226 0
二叉树的三种遍历方式