栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

AVL树结点的定义

产生一个结点

实现前序遍历二叉树

右旋的实现

左旋的实现


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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号