實現二叉樹的基本操作

博主主頁:?碼農派大星.

關注博主帶你了解更多數據結構知識

1我們先來模擬創建一個二叉樹

public class TestBinaryTreee {static class TreeNode{public char val;public  TreeNode left;public  TreeNode right;public TreeNode(char val) {this.val = val;}}public TreeNode creatTree(){TreeNode A  = new TreeNode('A');TreeNode B  = new TreeNode('B');TreeNode C  = new TreeNode('C');TreeNode D  = new TreeNode('D');TreeNode E  = new TreeNode('E');TreeNode F  = new TreeNode('F');TreeNode G  = new TreeNode('G');TreeNode H  = new TreeNode('H');A.left = B;A.right = C;B.left = D;B.right = E;C.left = F;C.right = G;E.right = H;return A;//就是根節點}
}

2分別實現它的前中后序遍歷

1前序遍歷

// 前序遍歷void preOrder(TreeNode root){if (root == null){return;}System.out.print(root.val+" ");//遞歸遍歷左子樹preOrder(root.left);//第歸遍歷右子樹preOrder(root.right );}
 TestBinaryTreee testBinaryTreee = new TestBinaryTreee();testBinaryTreee.creatTree();TestBinaryTreee.TreeNode root = testBinaryTreee.creatTree();testBinaryTreee.preOrder(root);System.out.println();

2中序遍歷

// 中序遍歷void inOrder(TreeNode root){if (root == null){return;}inOrder(root.left);System.out.print(root.val+" ");inOrder(root.right);}
 testBinaryTreee.inOrder(root);System.out.println();

3后序遍歷

// 后序遍歷void postOrder(TreeNode root){if (root == null){return;}inOrder(root.left);inOrder(root.right);System.out.print(root.val+" ");}
testBinaryTreee.postOrder(root);System.out.println();

3?獲取樹中節點的個數

 //求有多少個節點
1:public int size(TreeNode root){if (root == null){return 0;}int ret = size(root.left)+size(root.right)+1;return ret;}
2:public static int nodeSize;public void size2(TreeNode root){if (root == null){return ;}nodeSize++;size2(root.left);size2(root.right);}
 System.out.println(testBinaryTreee.size(root));testBinaryTreee.size2(root);System.out.println(TestBinaryTreee.nodeSize);

4獲取葉子節點的個數

//求葉子結點個數
1:public int getLeafNodeCount(TreeNode root){if (root == null){return 0;}if(root.left == null && root.right ==null){return 1;}return getLeafNodeCount(root.left)+getLeafNodeCount(root.right);}
2:public int leafSize;public void getLeafNodeCount2(TreeNode root){if (root == null){return ;}if(root.left == null && root.right ==null){leafSize++;}getLeafNodeCount2(root.left);getLeafNodeCount2(root.right);}
 System.out.println(testBinaryTreee.getLeafNodeCount(root));testBinaryTreee.getLeafNodeCount2(root);System.out.println(testBinaryTreee.leafSize);

5 獲取第K層節點的個數

 //獲取第k層節點個數public int getKLevelNodeCount(TreeNode root,int k){if(root == null){return 0;}if (k==1){return 1;}return getKLevelNodeCount(root.left,k-1)+getKLevelNodeCount(root.right,k-1);}
System.out.println(testBinaryTreee.getKLevelNodeCount(root, 3));

?

6獲取二叉樹的高度

 //獲取二叉樹高度public int getHeight(TreeNode root){if(root == null){return 0;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return leftHeight > rightHeight ?leftHeight+1 : rightHeight+1;}
int height = testBinaryTreee.getHeight(root);System.out.println(height);

7檢測值為value的元素是否存在

 // 檢測值為val的元素是否存在public TreeNode find(TreeNode root,char val){if(root == null){return null;}if (root.val == val ){return root;}TreeNode ret = find(root.left,val);if (ret != null){return ret;}ret = find(root.right,val);if (ret != null){return ret;}return null;}
TestBinaryTreee.TreeNode retN = testBinaryTreee.find(root, 'E');System.out.println(retN.val);

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

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

相關文章

交叉編譯u-boot,qemu啟動測試

交叉編譯u-boot 1 配置交叉編譯工具鏈: 下載地址 https://releases.linaro.org/components/toolchain/binaries/ ### CROSS-COMPILE export AARCH64_LINUX_GNU_TOOLS/media/wmx/cross_compile_tools/aarch64-linux-gun/gcc-x86_64_aarch64-linux-gnu/bin export …

linux 安裝 mangodb 并設置服務開機自啟

1、下載 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解壓 tar -zxvf mosquitto-1.6.8.tar.gz 3、編譯安裝cd mosquitto-1.6.8 make sudo make install4、在當前目錄。進入mosquitto服務文件存放的文件夾 cd service/systemd可以看到3個文件 點擊read…

【C/C++】設計模式——工廠模式:簡單工廠、工廠方法、抽象工廠

創作不易&#xff0c;本篇文章如果幫助到了你&#xff0c;還請點贊 關注支持一下?>&#x16966;<)!! 主頁專欄有更多知識&#xff0c;如有疑問歡迎大家指正討論&#xff0c;共同進步&#xff01; &#x1f525;c系列專欄&#xff1a;C/C零基礎到精通 &#x1f525; 給大…

二.基礎篇: 面向對象進階

1. 基礎篇語法篇&#xff1a;一.基礎篇&#xff1a;基礎語法-CSDN博客 面向對象進階 本章主要學習內容&#xff1a; static繼承包&#xff0c;final&#xff0c;權限修飾符&#xff0c;代碼塊抽象類接口多態內部類 1. static static翻譯過來就是靜態的意思static表示靜態&am…

AI語音模型PaddleSpeech踩坑(安裝)指南

PaddleSpeech簡介 PaddleSpeech 是基于飛槳 PaddlePaddle 的語音方向的開源模型庫&#xff0c;用于語音和音頻中的各種關鍵任務的開發&#xff0c;包含大量基于深度學習前沿和有影響力的模型。 PaddleSpeech安裝步驟 提示&#xff1a;要找到一個合適的PaddleSpeech版本與pad…

STM32開發學習——使用 Cortex-M3M4M7 故障異常原因與定位

STM32開發學習——使用 Cortex-M3/M4/M7 故障異常原因與定位 文章目錄 STM32開發學習——使用 Cortex-M3/M4/M7 故障異常原因與定位文檔說明&#xff1a;官方參考文檔線上鏈接&#xff08;可在線閱讀與下載&#xff09;&#xff1a;故障異常處理程序HardFault優先級升級說明故障…

java項目之相親網站的設計與實現源碼(springboot+mysql+vue)

風定落花生&#xff0c;歌聲逐流水&#xff0c;大家好我是風歌&#xff0c;混跡在java圈的辛苦碼農。今天要和大家聊的是一款基于springboot的相親網站的設計與實現。項目源碼以及部署相關請聯系風歌&#xff0c;文末附上聯系信息 。 項目簡介&#xff1a; 相親網站的設計與實…

連升三級!openGauss單機版從2.1.0經停3.0.0升級至5.0.0

前言 如前文所述&#xff0c;我們的小demo項目起初安裝了openGauss的2.1.0版本&#xff0c;由于2.1.0不是長期維護&#xff08;LTS&#xff09;版本&#xff0c;所以要升級到5.0.0LTS。考慮到雖然是DEMO項目&#xff0c;但也有些體驗用戶&#xff0c;所以為了保障業務連續性&a…

2023版brupsuite專業破解安裝

安裝教程&#xff0c;分兩部分&#xff1a; 1、安裝java環境、參考鏈接JAVA安裝配置----最詳細的教程&#xff08;測試木頭人&#xff09;_java安裝教程詳細-CSDN博客 2、安裝2023.4版本brupsuite&#xff1a;參考鏈接 2023最新版—Brup_Suite安裝配置----最詳細的教程&…

Java---類和對象第一節

目錄 1.面向對象初步認識 1.1什么是面向對象 1.2面向對象和面向過程的區別 2.類的定義和使用 2.1簡單認識類 2.2類的定義格式 2.3類的實例化 2.4類和對象的說明 3.this關鍵字 3.1訪問本類成員變量 3.2調用構造方法初始化成員變量 3.3this引用的特性 4.對象的構造以…

一文弄懂 Linux 系統調用函數之 exec 函數族

目錄 簡介函數原型參數說明返回值函數區別使用示例采用參數列表傳遞參數&#xff0c;以 execl 為例采用參數數組傳遞參數&#xff0c;以 execv 為例調用 PATH 下可執行文件&#xff0c;以 execlp 為例使用新的環境變量給新進程&#xff0c;以 execle 為例 更多內容 簡介 exec …

【Java】/*方法的使用-快速總結*/

目錄 一、什么是方法 二、方法的定義 三、實參和形參的關系 四、方法重載 五、方法簽名 一、什么是方法 Java中的方法可以理解為C語言中的函數&#xff0c;只是換了個名稱而已。 二、方法的定義 1. 語法格式&#xff1a; public static 返回類型 方法名 (形參列表) { //方…

windows server 2019 安裝 docker環境

一、根據官方說明進行安裝 , 看起來過程相當簡單, 但問題還是有的 準備 Windows 操作系統容器 | Microsoft Learn // 一個 powershell 腳本&#xff0c;該腳本配置環境以啟用與容器相關的 OS 功能并安裝 Docker 運行時。 Invoke-WebRequest -UseBasicParsing "https://r…

【Docker】Ubuntu下Docker的基本使用方法與常用命令總結

【Docker】docker的基本使用方法 鏡像image與容器container的關系基本命令- 查看 Docker 版本- 拉取鏡像- 查看系統中的鏡像- 刪除某個鏡像- 列出當前 Docker 主機上的所有容器&#xff0c;包括正在運行的、暫停的、已停止的&#xff0c;以及未運行的容器- 列出當前 Docker 主機…

【信息系統項目管理師知識點速記】溝通管理:管理溝通

管理溝通是確保項目信息流通順暢的關鍵流程,涉及到信息的收集、生成、傳播、存檔、檢索、監管及最終處理,以促進項目團隊與利益相關者的有效互動。這一過程不僅關乎信息的發布,更側重于信息的恰當格式與精準送達,同時鼓勵利益相關者的積極參與,包括信息補充、澄清和討論。…

《二十一》QT QML編程基礎

QML概述 QML&#xff08;Qt Meta-Object Language&#xff09;是一種聲明性語言&#xff0c;它被用于描述Qt框架中用戶界面的結構和行為。QML提供了一種簡潔、靈活的方式來創建動態和交互式的界面。 QML基于JavaScript語法&#xff0c;通過使用QML類型和屬性來定義界面的元素…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 大家繼續看 https://lilianweng.github.io/posts/2023-06-23-agent/的文檔內容 第二部分&#xff1a;內存 記憶的類型 記憶可以定義為用于獲取、存儲、保留以及隨后檢索信息的過程。人腦中有多…

Mac 使用:Micosoft Remote Desktop 遠程優化

Micosoft Remote Desktop遠程優化 服務器 遠程會話環境設置 WinR打開運行&#xff0c;輸入gpedit.msc 找到計算機配置->管理模板->Windows組件->遠程桌面服務->遠程桌面會話主機->遠程會話環境。下面這幾個打開&#xff0c;有效提高rdp性能。 rdp協議同時使用…

自動駕駛---Behavior Planning之EUDM

1 背景 在前面的博客中,為讀者朋友們闡述了自動駕駛Planning模塊基于MCTS行為規劃的文章《自動駕駛---Behavior Planning之MCTS》,博客中引用的論文的主要思想是以蒙特卡洛樹來實現行為規劃。今天,我們繼續探尋另一種行為規劃的策略,主角依然是香港科技大學。 熟悉的讀者大…

vim 文件內容替換 cat 合并文件

vim 文件內容替換 第一步&#xff1a;首先要進入末行模式&#xff08;在命令模式下輸入冒號:&#xff09; 第二步&#xff1a;根據需求替換內容 ① 只替換光標所在這一行的第一個滿足條件的結果&#xff08;只能替換1次&#xff09; :s/要替換的關鍵詞/替換后的關鍵詞 回…