考研真題數據結構

【2021年山西大學真題】將二叉樹中所有非終端結點的左右子樹交換位置,可以得到原二叉樹的

鏡像二叉樹,如圖。假設二叉樹的存儲形式為(lchild,data,rchild),給出求鏡像二叉樹的算法:

(1)給出算法的基本思想;

(2)根據設計思想,寫出算法;

(3)討論算法的時間復雜度和空間復雜度.


(1)設計一個算法,將二叉樹中所有非葉節點的左右子樹交換位置,從而得到原二叉樹的鏡像二叉樹。我們可以使用遞歸的方式來實現這個算法。
算法的基本思想如下:
1.?首先判斷當前節點是否為空,如果為空則返回。
2.?交換當前節點的左右子樹。
3.?對當前節點的左子樹調用遞歸函數,實現左子樹的鏡像。
4.?對當前節點的右子樹調用遞歸函數,實現右子樹的鏡像。

(2)下面是使用?C?語言編寫的實現上述算法的代碼:

```c
#include?<stdio.h>
#include?<stdlib.h>

typedef?struct?Node?{
????int?data;
????struct?Node*?left;
????struct?Node*?right;
}?Node;

void?mirrorBinaryTree(Node*?root)?{
????if?(root?==?NULL)?{
????????return;?//?如果當前節點為空,直接返回
????}

????//?交換當前節點的左右子樹
????Node*?temp?=?root->left;
????root->left?=?root->right;
????root->right?=?temp;

????//?遞歸處理左子樹和右子樹
????mirrorBinaryTree(root->left);
????mirrorBinaryTree(root->right);
}

//?測試代碼
void?printBinaryTree(Node*?root)?{
????if?(root?==?NULL)?{
????????return;
????}

????printf("%d?",?root->data);
????printBinaryTree(root->left);
????printBinaryTree(root->right);
}

int?main()?{
????Node*?root?=?(Node*)malloc(sizeof(Node));
????Node*?node1?=?(Node*)malloc(sizeof(Node));
????Node*?node2?=?(Node*)malloc(sizeof(Node));
????Node*?node3?=?(Node*)malloc(sizeof(Node));
????Node*?node4?=?(Node*)malloc(sizeof(Node));
????Node*?node5?=?(Node*)malloc(sizeof(Node));
????Node*?node6?=?(Node*)malloc(sizeof(Node));

????root->data?=?1;
????node1->data?=?2;
????node2->data?=?3;
????node3->data?=?4;
????node4->data?=?5;
????node5->data?=?6;
????node6->data?=?7;

????root->left?=?node1;
????root->right?=?node2;
????node1->left?=?node3;
????node1->right?=?node4;
????node2->left?=?node5;
????node2->right?=?node6;
????node3->left?=?NULL;
????node3->right?=?NULL;
????node4->left?=?NULL;
????node4->right?=?NULL;
????node5->left?=?NULL;
????node5->right?=?NULL;
????node6->left?=?NULL;
????node6->right?=?NULL;

????printf("原二叉樹:");
????printBinaryTree(root);
????printf("\n");

????mirrorBinaryTree(root);

????printf("鏡像二叉樹:");
????printBinaryTree(root);
????printf("\n");

????return?0;
}
```

在上述代碼中,我們首先定義了一個?`Node`?結構體來表示二叉樹的節點。然后,我們編寫了一個遞歸函數?`mirrorBinaryTree`,用于實現二叉樹節點交換的操作。通過遞歸調用,我們可以將二叉樹中所有非葉節點的左右子樹交換位置,并得到鏡像二叉樹。在?`main`?函數中,我們創建了一個測試用例,并分別輸出原二叉樹和鏡像二叉樹的結果。

(3)算法的時間復雜度是?O(n),其中?n?是二叉樹中的節點數。算法的空間復雜度是?O(h),其中?h?是二叉樹的高度。

?

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

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

相關文章

Sql Server Management Studio連接Mysql

目標 已知mysql連接參數&#xff08;地址和用戶&#xff09;&#xff0c;期望通過Microsoft Sql Server Management Studio &#xff08;以下簡稱MSSSMS&#xff09;連接Mysql&#xff0c;在MSSSMS中直接查詢或修改Mysql中的數據。 下載MySql Connector/ODBC并安裝&#xff0c…

使用poi-tl填充word模板,并轉化為pdf輸出

后端 依賴 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version> </dependency>Word版本 Word版本填充代碼 // 培訓詳情HashMap<String, Object> textMap new Ha…

maven環境搭建

maven歷史版本下載&#xff1a;https://archive.apache.org/dist/maven/ 新建系統變量編輯Path&#xff0c;添加bin目錄mvn -v測試查看版本號conf目錄下新建repository文件夾&#xff0c;作為本地倉庫 settings.xml <?xml version"1.0" encoding"UTF-8&…

2312d,d語言來綁定C++和rust

原文 各編譯語言相同概念 1,按可重用函數拆分代碼. 2,由源碼中的函數名生成的串來標識函數.如,g為void foo()生成_Z3foov的標識.此串總是是可重現的;如,Linux上的Clang和GCC都遵循ItaniumCABI約定來裝飾函數名. 3,在內存中的特定位置存儲該函數的所有參數,然后用調用或等效指…

gitee配置

注冊配置gitee Gitee官網 進入官網之后&#xff0c;有賬號直接登錄&#xff0c;沒有賬號注冊一個新的賬號 下載安裝git客戶端 官網地址 下載完成&#xff0c;一路直接點擊安裝直接安裝成功 檢查是否安裝成功 鼠標留在桌面–>右擊–>出現Git GUI Here/Git Bash Her…

windows系統nodeJs報錯node-sass npm ERR! command failed

報錯信息 npm WARN deprecated request2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated tar2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asa…

國科大通信原理復習

CH4-信源的數字化 26. 信源編碼的基本方法和分類 27. 無失真編碼和有失真編碼的區別 無失真編碼能夠完全一模一樣的恢復到原信號。 有失真編碼則不行。 28. 信息量和熵的定義 29. 離散信源的最大熵定理 n表示所有符號的種類&#xff0c;比如對于二進制碼字&#xff0c;Rbit對…

云計算ACP認證考試題庫0-100

0001.單選題:阿里云的云盾會檢查通過公共互聯網登錄云服務器ECS的來源IP,登錄方式包括SSH和遠程桌面,當來自某個IP的登錄請求出現多次密碼錯誤的情況時,會發出”ECS遭遇密碼暴力破解”的報警,當收到這個報警后,最安全的處理方法應該是。 A.通知自己業務平臺的所有用戶立即修改…

基于支持向量機SVM的新鮮度等級預測,基于自適應粒子群優化長短期神經網絡的新鮮度等級預測

目錄 背影 支持向量機SVM的詳細原理 SVM的定義 SVM理論 粒子群算法原理 SVM應用實例,基于支持向量機SVM的新鮮度等級預測,基于自適應粒子群優化長短期神經網絡的新鮮度等級預測 代碼 結果分析 展望 完整代碼:基于支持向量機SVM的新鮮度等級預測,基于自適應粒子群優化長短期…

SpringBoot+線程池實現高頻調用http接口并多線程解析json數據

場景 SpringbootFastJson實現解析第三方http接口json數據為實體類(時間格式化轉換、字段包含中文)&#xff1a; SpringbootFastJson實現解析第三方http接口json數據為實體類(時間格式化轉換、字段包含中文)-CSDN博客 Java中ExecutorService線程池的使用(Runnable和Callable多…

MindOpt APL:一款適合優化問題數學建模的編程語言

什么是建模語言 建模語言是一種描述信息或模型的編程語言&#xff0c;在運籌優化領域&#xff0c;一般是指代數建模語言。 比如要寫一個線性規劃問題的建模和求解&#xff0c;可以采用C、Python、Java等通用編程語言來實現計算機編程&#xff08;碼代碼&#xff09;&#xff0…

nodejs微信小程序+python+PHP的黃山旅游景點購票系統設計與實現-計算機畢業設計推薦

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 28 章:圣杯 = 專家 + ChatGPT 的協同作用

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 28 章&#xff1a;圣杯 專家 ChatGPT 的協同作用 ? 這就像是從 ChatGPT 或其他生成式人工智能中獲得高質量答案的圣杯。因為光知道怎么問&#xff08;提示工程技術&#xff09;還不夠&#xff0c;還要知…

harmonyOS開發技巧(二)——沉浸式以及狀態欄高

1. 設置沉浸式&#xff1a;win.setWindowLayoutFullScreen(true); 2. 獲取狀態欄的高&#xff1a;win.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM)以及win.on(avoidAreaChange, (data) > {})。 import UIAbility from ohos.app.ability.UIAbility; import wind…

聯邦多任務蒸餾助力多接入邊緣計算下的個性化服務 | TPDS 2023

聯邦多任務蒸餾助力多接入邊緣計算下的個性化服務 | TPDS 2023 隨著移動智能設備的普及和人工智能技術的發展,越來越多的分布式數據在終端被產生與收集&#xff0c;并以多接入邊緣計算(MEC)的形式進行處理和分析。但是由于用戶的行為模式與服務需求的多樣,不同設備上的數據分布…

復亞消防無人機 智能守護浙江安防

在黨中央高度重視防災減災救災工作的背景下&#xff0c;浙江省深化消防救援保障體系建設&#xff0c;借助智慧消防舉措&#xff0c;提高了城市的戰勤保障能力。特別是在古城區&#xff0c;復亞助力浙江打造智慧消防系統&#xff0c;通過消防無人機全自動飛行系統&#xff0c;成…

ALTERNET STUDIO 9.1 Crack

ALTERNET STUDIO 9.1 發布 宣布 AlterNET Studio 9.1 版本今天上線。AlterNET Studio 9.0 是一個中期更新&#xff0c;重點是改進我們所有的組件庫。 以下是 AlterNET Studio 9.1 的發布亮點&#xff1a; Roslyn C# 和 Visual Basic 解析器現在支持代碼修復/代碼重構。 代碼修復…

全景萬店通打造掌上智慧生活助手,助力店鋪全景引流

隨著網絡經濟的崛起&#xff0c;新一代的消費群體的消費習慣逐漸變得富有個性化&#xff0c;因此他們對于傳統的營銷方式具有視覺疲勞&#xff0c;傳統廣告的效果也越發微小&#xff0c;但是請明顯來代言&#xff0c;成本又十分高昂&#xff0c;那么還有什么引流好方法呢&#…

MySQL之數據庫的創建指令

創建數據庫 #創建數據庫指令&#xff1a; CREATE DATABASE hsp_db1 #創建名字為關鍵字的數據庫&#xff0c;為規避關鍵字&#xff0c;可以使用反引號 CREATE DATABASE CREATE#刪除數據庫指令&#xff1a; DROP DATABASE hsp_db1 DROP DATABASE CREATE如果不指定在這里插入代碼片…

Linux--學習記錄(2)

解壓命令&#xff1a; gzip命令&#xff1a; 參數&#xff1a; -k&#xff1a;待壓縮的文件會保留下來&#xff0c;生成一個新的壓縮文件-d&#xff1a;解壓壓縮文件語法&#xff1a; gzip -k pathname(待壓縮的文件夾名)gzip -kd name.gz&#xff08;待解壓的壓縮包名&#x…