国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

1066. Root of AVL Tree (25)

2019-11-08 03:14:00
字體:
來源:轉載
供稿:網友

這道題考察平衡二叉排列樹,由于之前沒有編寫過平衡二叉排列樹的代碼,過程中出現了一些小錯誤 1.我存儲的是高度,然后通過左右子樹高度差來判斷是否平衡,開始獲取高度時未+1 2.root指針開始未賦值NULL

#include<iostream>#include<cstdlib>#include<cstdio>#PRagma warning(disable:4996)using namespace std;struct node { int data;//數據 node *l, *r;//左右孩子的指針 int h;//高度 node() { h = 1;l = r = NULL; }};int Geth(node* &p)//求p的h{ if (p->l == NULL && p->r == NULL) p->h = 1; else if (p->l == NULL &&p->r != NULL)p->h = p->r->h+1; else if (p->l != NULL &&p->r == NULL) p->h = p->l->h+1; else p->h = p->l->h > p->r->h ? p->l->h+1 : p->r->h+1; return p->h;}int differ(node* &p)//求p的平衡讀(左子數高度-右子樹高度)不能出現絕對值>1{ if (p->l == NULL && p->r == NULL) return 0; else if (p->l == NULL &&p->r != NULL)return 0-p->r->h; else if (p->l != NULL &&p->r == NULL)return p->l->h; else return p->l->h - p->r->h; return 0;}void L_Rotate(node* &p)//左旋{ node *temp = p->r; p->r = temp->l; Geth(p); temp->l = p; p = temp; Geth(p);}void R_Rotate(node* &p)//右旋{ node *temp = p->l; p->l = temp->r; Geth(p); temp->r = p; p = temp; Geth(p);}void insert_node(node* &root, int e)//插入節點{ if (root == NULL)//插入新節點 { root = (node *)malloc(sizeof(node)); root->data = e;root->h = 1; root->l = root->r = NULL; } else { if (root->data == e) return;//插入元素已存在,結束 else if (root->data > e) insert_node(root->l, e);//插入元素小于root的值,插入左子樹 else insert_node(root->r, e);//cherub元素大于root的值,插入右子樹 Geth(root); if (differ(root) > 1)//L { switch (differ(root->l)) { case 1:R_Rotate(root);//LL情況 break; case -1: L_Rotate(root->l);//LR情況 R_Rotate(root); break; } } else if (differ(root) < -1)//R { switch (differ(root->r)) { case -1:L_Rotate(root);//RR情況 break; case 1: R_Rotate(root->r);//RL情況 L_Rotate(root); break; } } }}int flag;void InOrderTraver(node* &root)//中序遍歷,從小到大輸出{ if (root == NULL) return; InOrderTraver(root->l); if (flag == 0) { printf("%d", root->data);flag++; } else printf(" %d", root->data); InOrderTraver(root->r);}int main(){ node *root = NULL;//root int N; scanf("%d", &N); root = NULL; while (N--) { int temp; scanf("%d", &temp); insert_node(root, temp); } /*flag = 0; InOrderTraver(root);*/ cout << root->data << endl;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临桂县| 甘孜县| 涟水县| 榆树市| 吉木乃县| 工布江达县| 鞍山市| 富锦市| 开封市| 渭南市| 镇宁| 台中县| 镇雄县| 恭城| 依兰县| 江陵县| 阿鲁科尔沁旗| 大埔县| 七台河市| 鸡东县| 舟山市| 秦安县| 贞丰县| 延吉市| 谢通门县| 涿鹿县| 肇源县| 双辽市| 嵊州市| 淳安县| 绥棱县| 临夏市| 林芝县| 定襄县| 东海县| 墨竹工卡县| 达孜县| 黄大仙区| 连江县| 田阳县| 永川市|