平衡二叉树(AVL)模板
来源:互联网 发布:nginx不支持pathinfo 编辑:程序博客网 时间:2024/05/19 08:25
模板代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 1e2+5;int data[maxn];struct node{ int v,height; node *lchild, *rchild;};node* newNode(int v){ node* Node = new node; Node->v = v; Node->height = 1; Node->lchild = Node->rchild = NULL; return Node;}int getHeight(node *root){ if (root == NULL) return 0; else return root->height;}int getBlanceFactor(node* root){ return getHeight(root->lchild) - getHeight(root->rchild);}void upDateHeight(node *root){ root->height = max(root->lchild->height, root->rchild->height) + 1; return ;}void search_v(node *root, int v){ if (root == NULL){ printf("search failed!!\n"); return; } if (v == root->v){ cout<<v<<endl; } else if (v < root->v){ search_v(root->lchild, v); } else{ search_v(root->rchild, v); } return;}void L(node* &root){//这里一定要加引用的符号,否则在改变根节点的时候不会影响全局~ node* temp = root->rchild; root->rchild = temp->lchild; temp->lchild = root; upDateHeight(root); upDateHeight(temp); root = temp; return;}void R(node* &root){//这里一定要加引用的符号,否则在改变根节点的时候不会影响全局~ node* temp = root->lchild; root->lchild = temp->rchild; temp->rchild = root; upDateHeight(root); upDateHeight(temp); root = temp; return;}void insert_node(node* &root, int v){ if(root == NULL){ root = newNode(v); return; } if(v < root->v){ insert_node(root->lchild, v); upDateHeight(root); if (getBlanceFactor(root) == 2){ if (getBlanceFactor(root->lchild) == 1){ R(root); } else if(getBlanceFactor(root->lchild) == -1){ L(root->lchild); R(root); } } } else{ insert_node(root->rchild, v); upDateHeight(root); if (getBlanceFactor(root) == -2){ if (getBlanceFactor(root->rchild) == -1){ L(root); } else if(getBlanceFactor(root->rchild) == 1){ R(root->rchild); L(root); } } } return;}node* Create(int n){ node *root = NULL; for (int i=0; i<n; i++){ insert_node(root, data[i]); } return root;}int main(){ int n; cin>>n; for (int i=0; i<n; i++){ cin>>data[i]; } node* root; root = Create(n); search_v(root, 5); return 0;}
阅读全文
0 0
- 平衡二叉树(AVL)模板
- 二叉平衡树(绝对平衡)AVL 操作模板
- 平衡二叉查找(AVL)树(C++模板实现)
- C++模板类 平衡二叉树 AVL
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- AVL 平衡二叉树
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- AVL 平衡二叉树
- avl平衡二叉树
- 二叉平衡树AVL
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- 平衡二叉树 AVL
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- Linux命令大全
- github远程仓库
- Fibonacci的前四位
- 20170610 printf占位符
- Android UI和切图
- 平衡二叉树(AVL)模板
- 页面滚动视觉效果实现
- Java for Web学习笔记(五九):Controller替代Servlet(1)请求匹配
- Give it five minutes
- 各种OJ刷题记录5.31-6.8
- 遍历map数组
- 读白刃underscore疑惑分析--underscore源码学习三
- CRC校验-arp脚本
- Nginx的个人理解