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

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

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. }

 

相关文章
|
5月前
二叉树查找值为x的结点、树的高度、第k层结点个数的代码实现
二叉树查找值为x的结点、树的高度、第k层结点个数的代码实现
|
12月前
【数据结构】单值二叉树 & 相同的树 & 翻转二叉树(五)
【数据结构】单值二叉树 & 相同的树 & 翻转二叉树(五)
45 0
|
4月前
数据结构学习记录——平衡二叉树的调整(基本介绍、右单旋、左单旋、左右双旋、右左双旋、平衡因子的计算)
数据结构学习记录——平衡二叉树的调整(基本介绍、右单旋、左单旋、左右双旋、右左双旋、平衡因子的计算)
34 1
|
5月前
|
测试技术
ONT60 旋转链表 思路分享
先将整个链表整体反转,再分别反转前k个和剩下的。
26 0
|
5月前
|
机器学习/深度学习 C++
初阶数据结构之---二叉树链式结构(二叉树的构建,二叉树的前序,中序,后序和层序遍历,计算二叉树结点个数,第k层结点个数,叶子结点个数,判断是否为完全二叉树)
初阶数据结构之---二叉树链式结构(二叉树的构建,二叉树的前序,中序,后序和层序遍历,计算二叉树结点个数,第k层结点个数,叶子结点个数,判断是否为完全二叉树)
|
算法 安全
二叉树的基本操作(如何计算二叉树的结点个数,二叉树的高度)
二叉树的基本操作(如何计算二叉树的结点个数,二叉树的高度)
247 0
|
C++
【C++】AVL树的插入实现(详解旋转机制)
【C++】AVL树的插入实现(详解旋转机制)
108 0
二叉树的三种遍历方式
二叉树的三种遍历方式
217 0
二叉树的三种遍历方式
|
算法 知识图谱
【数据结构和算法】二叉树的创建,遍历,复制,结点计算,高度计算
【数据结构和算法】二叉树的创建,遍历,复制,结点计算,高度计算
103 0
【数据结构和算法】二叉树的创建,遍历,复制,结点计算,高度计算
|
存储 Java
(Java)数据结构之树与二叉树(二叉树的四种遍历,获取结点个数,获取叶子结点个数,获取高度,获取第k层结点个数,查找值为val的结点,判断一棵树是否为完全二叉树(详述,图文并茂)
树是一种非线性的数据结构,它是由n个(n>=0)个有限节点组成一个具有层次关系的集合。它的形状像一颗倒挂的树,根在上,叶在下。
(Java)数据结构之树与二叉树(二叉树的四种遍历,获取结点个数,获取叶子结点个数,获取高度,获取第k层结点个数,查找值为val的结点,判断一棵树是否为完全二叉树(详述,图文并茂)