數據結構_二叉平衡樹

#include <stdio.h>
#include <stdlib.h>
#define max(a,b) ((a > b)? (a):(b))//平衡二叉樹的節點結構
typedef struct AVL_TreeNode{int data; //數據域struct AVL_TreeNode* l;struct AVL_TreeNode* r;int h;//記錄樹的高度,用于計算平衡因子 
}avlNode,* avlTree; //創建節點函數
avlNode* createNode(int key, avlNode* l, avlNode* r){avlNode* node = (avlNode*)malloc(sizeof(avlNode));node->l = l;node->r = r;node->data = key;node->h = 0;return node;
} //獲取樹的高度函數
int get_h(avlNode* node){if(node == NULL){return 0;}else{return node->h;}
} //四種旋轉函數
//1.單左旋(解決RR問題)
avlNode* RR(avlNode* x){avlNode* y = x->r;x->r = y->l;y->l = x;x->h = max(get_h(x->l), get_h(x->r))+1;y->h = max(get_h(y->l), get_h(y->r))+1;return y;
}//2. 單右旋(解決LL問題)
avlNode* LL(avlNode* x){avlNode* y = x->l;x->l = y->r;y->r = x;x->h = max(get_h(x->l), get_h(x->r))+1;y->h = max(get_h(y->l), get_h(y->r))+1;return y;
} //3. LR(往x節點的左孩子的右子樹上插入節點導致失衡)
avlNode* LR(avlNode* x){//先對x的左孩子進行單左旋x->l = RR(x->l); //再對x進行單右旋 x = LL(x);return x;
}//4. RL(往x節點的右孩子的左子樹上插入節點導致失衡)
avlNode* RL(avlNode* x){//1.先對x的右孩子進行單右旋x->r = LL(x->r);//2. 再對x進行單左旋x = RR(x);return x; 
} //平衡二叉樹的插入操作
avlTree insert_avlNode(avlNode* tree, int key){if(tree == NULL){avlNode* node = createNode(key, NULL, NULL);tree = node;}//向右子樹方向插入 else if(key > tree->data){tree->r = insert_avlNode(tree->r, key);//失衡調整 if(get_h(tree->r) - get_h(tree->l) > 1){//RL情況 if(key < tree->data){tree = RL(tree); }//RR情況 else{tree = RR(tree);}} }//向左子樹方向插入 else if(key < tree->data){tree->l = insert_avlNode(tree->l, key);//失衡調整 if(get_h(tree->l) - get_h(tree->r) > 1){//LL情況 if(key < tree->data){tree = LL(tree); }//LR情況 else{tree = LR(tree);}} }tree->h = max(get_h(tree->l), get_h(tree->r))+1;return tree; } void in_order(avlTree tree)
{//中序遍歷輸出 if (tree){in_order(tree->l);printf("%d   ", tree->data);in_order(tree->r);}
}int main()
{avlTree tree = NULL;int a[9] = { 1,2,3,4,5,6,7,8,9 };for (int i = 0; i < 9; i++){tree = insert_avlNode(tree, a[i]);}in_order(tree);printf("\n");}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921585.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掃描件、PDF、圖片都能比對!讓文檔差異無所遁形

智能文檔比對系統可精準識別文檔差異&#xff0c;解決金融、法律等多方協作場景下的版本混亂、審核低效和合規風險問題&#xff0c;將一份百頁文檔的人工核對從數小時縮短至3分鐘以內。 文檔差異比對常見場景有哪些&#xff1f; 每一次文檔的修改都可能帶來潛在風險&#xff0c…

excel里面店鋪這一列的數據結構是2C【uniteasone17】這種,我想只保留前面的2C部分,后面的【uniteasone17】不要

這個結構是&#xff1a; 2C【uniteasone17】只要取前面的 2C 部分&#xff0c;可以用 Excel 的 公式 或者 文本函數 來實現。 方法 1&#xff1a;使用公式提取 假設店鋪數據在 A2 單元格&#xff1a; LEFT(A2,FIND("【",A2)-1)&#x1f449; 解釋&#xff1a; FIND(“…

四、神經網絡的學習(中)

4.3 數值微分梯度法使用梯度的信息決定前進的方向。本節將介紹梯度是什么、有什么性質等內容。4.3.1 導數假如你是全程馬拉松選手&#xff0c;在開始的10分鐘內跑了2千米。如果要計算此時的奔跑速度&#xff0c;則為2/10 0.2&#xff3b;千米/分&#xff3d;。也就是說&#x…

Jenkins 監控方案:Prometheus + Grafana 實踐

這兩天在運維群里面看到有人說 Jenkins 節點也可以監控&#xff0c;以前沒想過搞這個&#xff0c;現在就對公司 Jenkins 搞搞順便記錄下唄。 一、使用 Jenkins Prometheus 插件&#xff08;推薦方式&#xff09; 1. 安裝插件 在 Jenkins 插件管理里搜索并安裝 Prometheus Me…

用博圖FB類比c#中sdk的api

我有一個大膽的想法我準備自己做個簡單的視覺軟件來鍛煉自己的c#編程能力&#xff0c;我準備用到海康工業機器人官網下載的mvs軟件的sdk,聽說sdk的主要作用就是api提供了開放的接口給第三方免費調用。按照我的理解&#xff0c;api接口就像西門子博圖的FB塊&#xff0c;所謂api接…

【Leetcode】高頻SQL基礎題--1164.指定日期的產品價格

【Leetcode】高頻SQL基礎題–1164.指定日期的產品價格 要求&#xff1a;一開始&#xff0c;所有產品價格都為 10。編寫一個解決方案&#xff0c;找出在 2019-08-16 所有產品的價格。 以 任意順序 返回結果表。解題思路&#xff1a; 找到 2019-08-16 前所有有改動的產品及其最新…

Django全局異常處理全攻略

在 Django 中處理全局異常&#xff0c;有幾種常見的方式&#xff0c;通常目標是&#xff1a; 捕獲項目中未被單獨處理的錯誤統一返回給前端&#xff08;如 JSON 響應 / 自定義錯誤頁&#xff09;方便記錄日志1. 使用 Django 自帶的全局異常處理機制 Django 有一些內置的全局錯誤…

【開題答辯全過程】以電商數據可視化系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

MyBatis入門到精通:CRUD實戰指南

1. MyBatisORM&#xff1a;對象關系映射O&#xff08;Object&#xff09;&#xff1a;Java虛擬機中的Java對象R&#xff08;Relational&#xff09;&#xff1a;關系型數據庫M&#xff08;Mapping&#xff09;&#xff1a;將Java虛擬機中的Java對象映射到數據庫表中一行記錄&am…

WebRTC開啟實時通信新時代

摘要&#xff1a;WebRTC&#xff08;Web實時通信&#xff09;是一項開源技術&#xff0c;支持瀏覽器直接進行低延遲音視頻通信和數據傳輸&#xff0c;無需安裝插件。其核心技術包括RTCPeerConnection&#xff08;建立點對點連接&#xff09;、MediaStream&#xff08;媒體流處理…

【51單片機8*8點陣顯示箭頭動畫詳細注釋】2022-12-1

緣由51單片機實現8*8滾動箭頭的程序,運行時什么圖案都沒有,甚至根本不亮 - 24小時必答區 #include<reg52.h> unsigned char code M[]{0xff,0xff,0xfe,0xfd,0xf8,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfb,0xf0,0xfb,0xfd,0xff,0xff,0xff,0xfb,0xf7,0xe0,0xf7,0xfb,0xff,0xff,0…

手撕Redis底層3-持久化機制與集群化方案

1.Redis持久化機制Redis設計了兩種持久化落盤機制&#xff1a;RDB和AOF1.1 RDB持久化RDB持久化是Redis的數據快照&#xff0c;簡單來說就是把內存中的所有數據都記錄到磁盤中&#xff0c;當Redis實例故障重啟后&#xff0c;從磁盤中讀取快照文件來恢復數據。快照文件稱為RDB文件…

mysql中null值對in子查詢的影響

1、場景 有這樣一個查詢&#xff0c;有些時候是正確的&#xff0c;有些時候沒報錯但是又查詢不到數據&#xff0c;分析數據排查后發現當user_id字段存在null值的時候查詢不到數據。select * from table1 where id in (select user_id from talbe2 where status1);2、問題 為什么…

如何在 tortoise-orm 內使用 JSON_EXTRACT

先說結論&#xff1a; # 假設 JsonField 名稱為 data&#xff0c;內容為 {"info": {"path": "我的資源創建"}} qs qs.filter(data__filter{"info.path": "我的資源創建"})我查看了 tortoise-orm 官方文檔&#xff0c;沒有這…

西門子S7-200 SMART PLC:編寫最基礎的“起保停”程序

一、什么是“起保停”電路&#xff1f;“起保停”是“啟動-保持-停止”的簡稱&#xff0c;也稱為“自鎖電路”。它是繼電器控制系統和PLC程序中最基本、最核心的控制邏輯。啟動 (Start): 由一個點動按鈕&#xff08;常開觸點&#xff09;觸發&#xff0c;使設備運行。保持 (H…

漏洞修復 Nginx SSL/TLS 弱密碼套件

掃描結果 [rootlocalhost nmap]# docker run --rm -v $(pwd)/results:/results securecodebox/nmap nmap --script ssl-enum-ciphers -p 443 xxx.cn -oX /results/output_0904.xml Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-04 05:02 UTC Nmap scan report for xxx.…

ChartGPT深度體驗:AI圖表生成工具如何高效實現數據可視化與圖表美化?

最近幫運營同事做季度數據報告時&#xff0c;我差點在圖表樣式上栽跟頭 —— 明明數據都算好了&#xff0c;用 Excel 調柱狀圖的顏色、字體、坐標軸標簽&#xff0c;來回改了快半小時&#xff0c;要么字體太大擠在一起&#xff0c;要么顏色搭配顯臟&#xff0c;運營催得急&…

深入理解 JVM 字節碼文件:從組成結構到 Arthas 工具實踐

在 Java 技術體系中&#xff0c;JVM&#xff08;Java 虛擬機&#xff09;是實現 “一次編寫&#xff0c;到處運行” 的核心。而字節碼文件作為 Java 代碼編譯后的產物&#xff0c;是 JVM 執行的 “原材料”。今天&#xff0c;我們就從字節碼文件的組成結構講起&#xff0c;再結…

SoundSource for Mac 音頻控制工具

SoundSource for Mac 是一款音頻控制工具&#xff0c;中文常被稱為 音頻源管理器。它能夠精確控制系統與應用程序的音量、輸出設備和音效處理&#xff0c;讓用戶獲得比 macOS 原生更靈活的音頻管理體驗。SoundSource 既適合音樂發燒友&#xff0c;也適合日常辦公和影音娛樂用戶…

云平臺面試內容(二)

5. VPC、子網、路由、NAT網關、安全組、網絡ACL 區別與網絡隔離設計 概念區別: VPC(虛擬私有云): VPC是在公有云上劃分出的一個用戶專屬的虛擬網絡環境,相當于用戶在云上的私有數據中心。用戶可以自定義VPC的IP地址段、路由策略等。不同VPC網絡隔離,默認互不相通,確保資…