數據結構(陳越,何欽銘) 第四講 樹(中)

4.1 二叉搜索樹

4.1.1 二叉搜索樹及查找

在這里插入圖片描述

Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;}
} Position IterFind(ElementType X,BinTree BST){while(BST){if(X>BST->Data){BST=BST->Right;}else if(X<BST->Data){BST=BST->Left;}else{return BST;}}
}Position FindMin(BinTree BST){if(!BST){return NULL;}else if(!BST->Left){return BST;}else{return FindMin(BST->Left);}
}Position FindMax(BinTree BST){if(BST){while(BST->Right){BST=BST->Right;}}return BST;
}

4.1.2 二叉搜索樹的插入

BinTree Insert(ElementType X,BinTree BST){if(!BST){BST=(BinTree)malloc(sizeof(struct TreeNode));BST->Data=X;BST->Left=BST->Right=NULL;}else{if(X<BST->Data){BST->Left=Insert(X,BST->Left);}else if(X>BST->Data){BST->Right=Insert(X,BST->Right);}}return BST;
}

4.1.3 二叉搜索樹的刪除

BinTree Delete(ElementType X,BinTree BST){Position Tmp;if(!BST){printf("要刪除的元素未找到");}else if(X<BST->Data){BST->Left=Delete(X,BST->Left);}else if(X>BST->Data){BST->Right=Delete(X,BST->Right);}else{if(BST->Left&&BST->Right){Tmp=FindMin(BST->Right);BST->Data=Tmp->Data;BST->Right=Delete(BST->Data,BST->Right);}else{Tmp=BST;if(!BST->Left){BST=BST->Right;}else if(!BST->Right){BST=BST->Left;}free(Tmp);}}return BST;
}

4.2 平衡二叉樹

4.2.1 什么是平衡二叉樹

在這里插入圖片描述

4.2.2 平衡二叉樹的調整

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;}
} Position IterFind(ElementType X,BinTree BST){while(BST){if(X>BST->Data){BST=BST->Right;}else if(X<BST->Data){BST=BST->Left;}else{return BST;}}
}Position FindMin(BinTree BST){if(!BST){return NULL;}else if(!BST->Left){return BST;}else{return FindMin(BST->Left);}
}Position FindMax(BinTree BST){if(BST){while(BST->Right){BST=BST->Right;}}return BST;
}BinTree Insert(ElementType X,BinTree BST){if(!BST){BST=(BinTree)malloc(sizeof(struct TreeNode));BST->Data=X;BST->Left=BST->Right=NULL;}else{if(X<BST->Data){BST->Left=Insert(X,BST->Left);}else if(X>BST->Data){BST->Right=Insert(X,BST->Right);}}return BST;
}BinTree Delete(ElementType X,BinTree BST){Position Tmp;if(!BST){printf("要刪除的元素未找到");}else if(X<BST->Data){BST->Left=Delete(X,BST->Left);}else if(X>BST->Data){BST->Right=Delete(X,BST->Right);}else{if(BST->Left&&BST->Right){Tmp=FindMin(BST->Right);BST->Data=Tmp->Data;BST->Right=Delete(BST->Data,BST->Right);}else{Tmp=BST;if(!BST->Left){BST=BST->Right;}else if(!BST->Right){BST=BST->Left;}free(Tmp);}}return BST;
}

小白專場

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

#include <stdio.h>
#include <stdlib.h>typedef struct TreeNode *Tree;
struct TreeNode{int v;Tree Left,Right;int flag;
};Tree NewNode(int V){Tree T=(Tree)malloc(sizeof(struct TreeNode));T->v=V;T->Left=T->Right=NULL;T->flag=0;return T;
}Tree Insert(Tree T,int V){if(!T){T=NewNode(V);}else{if(V>T->v){T->Right=Insert(T->Right,V);}else{T->Left=Insert(T->Left,V);}}return T;
}Tree MakeTree(int N){Tree T;int i,V;scanf("%d",&V);T=NewNode(V);for(i=1;i<N;i++){scanf("%d",&V);T=Insert(T,V);}return T;
}int check(Tree T,int V){if(T->flag){if(V<T->v){return check(T->Left,V);}else if(V>T->v){return check(T->Right,V);}else{return 0;}}else{if(V==T->v){T->flag=1;return 1;}else{return 0;}}
}int Judge(Tree T,int N){int i,V,flag=0;scanf("%d",&V);if(V!=T->v){flag=1;}else{T->flag=1;}for(i=1;i<N;i++){scanf("%d",&V);if((!flag)&&(!check(T,V))){flag=1;}}if(flag){return 0;}else{return 1;}
}void ResetT(Tree T){if(T->Left){ResetT(T->Left);}if(T->Right){ResetT(T->Right);}T->flag=0;
}void FreeTree(Tree T){if(T->Left){FreeTree(T->Left);}if(T->Right){FreeTree(T->Right);}free(T);
}int main(){int N,L,i;Tree T;scanf("%d",&N);while(N){scanf("%d",&L);T=MakeTree(N);for(i=0;i<L;i++){if(Judge(T,N)){printf("Yes\n");	}else{printf("No\n");}ResetT(T);}FreeTree(T);scanf("%d",&N);}return 0;
}

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

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

相關文章

GEE學習筆記 28:基于Google Earth Engine的Landsat8纓帽變換土壤指數反演——亮度、綠度與濕度分量的提取

1.纓帽變換介紹 纓帽變換(Tasseled Cap Transformation,TCT),也稱為纓帽特征空間或纓帽系數,是一種用于遙感圖像分析的線性變換方法。它最初由美國農業部的研究人員E. Kauth和G. Thomas在1976年提出,用于增強陸地衛星(Landsat)圖像中的特定地表特征,如植被、土壤和城市…

【現代Web布局與動畫技術:卡片組件實戰分享】

&#x1f4f1; 現代Web布局與動畫技術&#xff1a;卡片組件實戰分享 &#x1f680; 引言 &#x1f31f; 在過去的開發過程中&#xff0c;我們共同實現了一個功能豐富的卡片組件&#xff0c;它不僅美觀&#xff0c;還具有交互性和響應式設計。這篇文章將分享這個組件背后的技術…

學習路之PHP --TP6異步執行功能 (無需安裝任何框架)

學習路之PHP --異步執行功能 &#xff08;無需安裝任何框架&#xff09; 簡介一、工具類二、調用三、異步任務的操作四、效果&#xff1a; 簡介 執行異步任務是一種很常見的需求&#xff0c;如批量發郵箱&#xff0c;短信等等執行耗時任務時&#xff0c;需要程序異步執行&…

STM32之影子寄存器

預分頻寄存器計數到一半的時候&#xff0c;改變預分頻值&#xff0c;此時不會立即生效&#xff0c;會等到計數完成&#xff0c;再從影子寄存器即預分頻緩沖器里裝載修改的預分頻值。 如上圖&#xff0c;第一行是內部時鐘72M&#xff0c;第二行是時鐘使能&#xff0c;高電平啟動…

Deepseek API接入IDE【VSCode Cline Cursor ChatBox Deepseek deepseek-reasoner】

本文解決以下疑難雜癥: 使用deepseek的最新接模型接入ide 使用deepseek的最新接模型接入vscode 使用deepseek的最新接模型接入vscode中的Cline 使用deepseek的最新接模型接入Cline 使用deepseek的最新接模型接入ChatBox 使用cursor接入Deepseek官方的的deepseek-reasoner…

微信小程序讀取寫入NFC文本,以及NFC直接啟動小程序指定頁面

一、微信小程序讀取NFC文本(yyy優譯小程序實現),網上有很多通過wx.getNFCAdapter方法來監聽讀取NFC卡信息,但怎么處理讀取的message文本比較難找,現用下面方法來實現,同時還解決幾個問題,1、在回調方法中this.setData不更新信息,因為this的指向問題,2、在退出頁面時,…

在Linux桌面上創建Idea啟動快捷方式

1、在桌面新建idea.desktop vim idea.desktop [Desktop Entry] EncodingUTF-8 NameIntelliJ IDEA CommentIntelliJ IDEA Exec/home/software/idea-2021/bin/idea.sh Icon/home/software/idea-2021/bin/idea.svg Terminalfalse TypeApplication CategoriesApplication;Developm…

VUE2生命周期頁面加載順序

使用 Vue CLI 4.5 運行 vue create myvue 創建項目&#xff0c;并通過 npm run serve 運行后&#xff0c;會生成一個標準的 Vue 項目目錄結構。以下是生成目錄的詳細說明&#xff0c;以及運行 localhost:8080 后 Vue 頁面的加載順序。 1. 生成目錄結構 運行 vue create myvue …

SV基礎(一):System Verilog與Verilog核心區別詳解

文章目錄 **1. 設計增強功能****數據類型擴展****接口(Interface)****2. 驗證功能增強****斷言(Assertions)****約束隨機測試****功能覆蓋率****3. 面向對象編程(OOP)****4. 測試平臺(Testbench)改進****5. 語法簡化****6. 其他關鍵區別****學習建議**System Verilog 是…

如何用 Python 進行機器學習

文章目錄 前言1. 環境準備Python安裝選擇Python開發環境安裝必要庫 2. 數據收集與加載3. 數據探索與可視化4. 數據預處理5. 模型選擇與訓練6. 模型評估7. 模型調優8. 模型部署 前言 使用 Python 進行機器學習一般可以按照以下步驟進行&#xff0c;下面將詳細介紹每個步驟及對應…

2021-05-27 C++找出矩陣數組中值最大的元素和它在數組中的位置

緣由各位大佬&#xff0c;這個應該怎么做_編程語言-CSDN問答 void 找出數組中值最大的元素和它在數組中的位置() {//緣由https://ask.csdn.net/questions/7436585?spm1005.2025.3001.5141int a[4][4], aa 0, aaa 0, d 0, x 0;while (aa < 4 && aaa < 4)std…

在 IntelliJ IDEA 中啟動多個注冊到 Nacos 的服務

使用場景&#xff1a;邊改代碼&#xff0c;邊和前端聯調。 在微服務架構中&#xff0c;服務注冊與發現是核心功能之一。Nacos 作為一款流行的開源服務注冊與配置管理工具&#xff0c;被廣泛應用于微服務架構中。本文將介紹如何在 IntelliJ IDEA 中配置并啟動多個注冊到 Nacos …

DeepSeek開源周Day2:DeepEP - 專為 MoE 模型設計的超高效 GPU 通信庫

項目地址&#xff1a;https://github.com/deepseek-ai/DeepEP 開源日歷&#xff1a;2025-02-24起 每日9AM(北京時間)更新&#xff0c;持續五天 (2/5)&#xff01; ? ? 引言 在大模型訓練中&#xff0c;混合專家模型&#xff08;Mixture-of-Experts, MoE&#xff09;因其動…

HTTP學習——————(四)TLS等加密算法

前文學習&#xff1a; 一、二、三 學習來源網站 &#xff1a; 極客時間 TLS 目的&#xff1a;身份驗證、保密性、完整性 解決問題&#xff1a; Record記錄協議——對稱加密 Handshake握手協議———1.驗證通訊雙方身份 2.交換加解密安全套件 3.協商加密參數 有密鑰交換算法…

FastExcel vs EasyExcel vs Apache POI:三者的全面對比分析

一、核心定位與歷史沿革 Apache POI&#xff08;1990s-&#xff09; 作為Java生態中最古老的Excel處理庫&#xff0c;提供對.xls/.xlsx文件的全功能支持。其核心價值在于對Excel規范的完整實現&#xff0c;包括單元格樣式、公式計算、圖表操作等深度功能。但存在內存消耗大&…

辛格迪客戶案例 | 鼎康生物電子合約系統(eSign)項目

01 案例企業 鼎康(武漢)生物醫藥有限公司于2013年06月19日成立 &#xff0c;是一家總部位于湖北武漢的CDMO公司&#xff0c;堅持以客戶為中心&#xff0c;以及時、經濟和高質量為服務導向。鼎康生物擁有先進的150,000平方英尺的生產廠房&#xff0c;生產設施位于中國武漢的Bio…

multer 依賴詳解

multer 是一個用于處理 multipart/form-data 類型表單數據的 Node.js 中間件&#xff0c;主要用于文件上傳。它基于 busboy 構建&#xff0c;使用起來非常方便。 一、安裝 npm install multer 二、基本使用 const express require("express");const multer req…

點云配準技術的演進與前沿探索:從傳統算法到深度學習融合(4)

4、點云配準面臨的挑戰與應對策略 4.1 點云配準面臨的主要挑戰 在點云配準的實際應用中&#xff0c;盡管已經取得了顯著的研究成果&#xff0c;但仍然面臨著諸多復雜而嚴峻的挑戰&#xff0c;這些挑戰嚴重制約了點云配準技術在更多領域的廣泛應用和深入發展。 在自動駕駛場景…

PostgreSQL10 物理流復制實戰:構建高可用數據庫架構!

背景 PostgreSQL 10 在高可用架構中提供了物理復制&#xff0c;也稱為流復制&#xff08;Streaming Replication&#xff09;&#xff0c;用于實現實例級別的數據同步。PostgreSQL 復制機制主要包括物理復制和邏輯復制&#xff1a;物理復制依賴 WAL 日志進行物理塊級別的同步&…

?算法OJ?位操作實戰【計數】(C++ 實現)

191. Number of 1 Bits Given a positive integer n, write a function that returns the number of set bits in its binary representation (also known as the Hamming weight). int hammingWeight(uint32_t n) {int count 0;while (n) {count n & 1; // 檢查最低位…