【Java--數據結構】二叉樹

歡迎關注個人主頁:逸狼


創造不易,可以點點贊嗎~

如有錯誤,歡迎指出~



樹結構

樹是一種非線性的數據結構,它是由n(n>=0)個有限結點組成一個具有層次關系的集合

注意:樹形結構中,子樹之間不能有交集,否則就不是樹形結構

常見概念?

?節點的度:一個節點含有子樹的個數,如A的度為6

樹的度:一顆樹所有節點的度的最大值,如上圖中樹的度為6

葉子節點(終端節點):度為0的節點,如P,Q節點

父節點(雙親節點):有子節點的節點,如A是B的父節點

子節點(孩子節點):與父節點相反,如B是A的子節點

根節點:沒有父節點的節點,如A

節點的層次:從根節點為第1層 ,往下數,以此類推。

樹的高度:樹的最大層次數,如上圖樹的高度為4

樹的應用

?二叉樹

一棵二叉樹是結點的一個有限集合,該集合: 為空或者是由一個根節點加上兩棵別稱為左子樹和右子樹的二叉樹組成

?注意:每個節點最多有兩顆子樹,且有左右之分。

?二叉樹的各種情況

滿二叉樹 與 完全二叉樹

滿二叉樹:每層的節點都達到最大值。(若滿二叉樹的層數為k,則節點個數為2^K-1)

完全二叉樹:每一層從左到右數,直到最后一個節點的前面必須是滿的。(滿二叉樹是特殊的完全二叉樹)

二叉樹的性質:

前、中、后、層序遍歷

前序遍歷:根、左、右

中序遍歷:左、根、右

后序遍歷:左、右、根

層序遍歷:從上到下,從左到右,依次遍歷?

創建二叉樹

二叉樹的節點

public class TestBinaryTree {static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val){this.val=val;}}
}

?手動搭建一個二叉樹

    public TreeNode createTree(){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;E.right=H;C.left=F;C.right=G;return A;}

    public void preOrder (TreeNode root){if(root==null){return;}System.out.print(root.val+" ");//遞歸遍歷左子樹preOrder(root.left);//遞歸遍歷右子樹preOrder(root.right);}public void inOrder(TreeNode root){if(root==null){return;}inOrder(root.left);System.out.print(root.val+" ");inOrder(root.right);}public void postOrder(TreeNode root){if(root==null){return;}postOrder(root.left);postOrder(root.right);System.out.print(root.val+" ");}

測試

        TestBinaryTree testBinaryTree=new TestBinaryTree();TestBinaryTree.TreeNode root= testBinaryTree.createTree();testBinaryTree.preOrder(root);System.out.println();testBinaryTree.inOrder(root);System.out.println();testBinaryTree.postOrder(root);

根據 前序遍歷 和 中序遍歷

或者 后序遍歷 和 中序遍歷 可以創建二叉樹

而 前序 和 后序 不能

獲取整棵樹的節點數size

子問題思路

左子樹節點數+右子樹節點數+1=整棵樹的

    //求整個樹的節點個數public int size(TreeNode root){if(root==null){return 0;}int ret=size(root.left)+size(root.right)+1;return ret;}

遍歷思路

每遍歷一個節點就++

//遍歷思路public int nodeSize;public void size2(TreeNode root){if(root==null){return;}nodeSize++;size2(root.right);size2(root.left);}

求葉子節點的個數

子問題思路

?整棵樹的葉子節點個數=左樹的+右樹的

    public  int getLeafNodeCount(TreeNode root){if (root==null){return 0;}if (root.right==null&&root.left==null){return 1;}return getLeafNodeCount(root.right)+getLeafNodeCount(root.left);}

?遍歷思路

    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);}

?計算第k層有多少個節點

已知前提:k是合法的

public int getKLevalNodeCount(TreeNode root,int k){if(root==null){return 0;}if(k==1){return 1;}return getKLevalNodeCount(root.left,k-1)+getKLevalNodeCount(root.right,k-1);}

?求樹的高度

整棵樹的高度=Math.max(左樹的高度和右樹高度)+1

    //求樹的高度public int getHeight(TreeNode root){if(root==null){return 0;}int leftHeight=getHeight(root.left);int rightHeight=getHeight(root.right);
//        return Math.max(leftHeight,rightHeight)+1;return leftHeight>rightHeight?leftHeight+1:rightHeight+1;}

找值為val的節點

//    找值為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;}

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

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

相關文章

Transformer模型在多任務學習中的革新應用

在深度學習領域,多任務學習(Multi-task Learning, MTL)是一種訓練模型以同時執行多個任務的方法。這種方法可以提高模型的泛化能力,因為它允許模型在不同任務之間共享知識。近年來,Transformer模型因其在自然語言處理&…

【linux高級IO(三)】初識epoll

💓博主CSDN主頁:杭電碼農-NEO💓 ? ?專欄分類:Linux從入門到精通? ? 🚚代碼倉庫:NEO的學習日記🚚 ? 🌹關注我🫵帶你學更多操作系統知識 ? 🔝🔝 Linux高級IO 1. 前言2. 初識e…

STM32 HRTIM生成PWM時遇到無法輸出PWM脈沖波形問題

在使用HRTIM生成PWM時,當把周期寄存器更新的設置放到while循環中時,無法輸出PWM脈沖波形,即使增加計數延時也無法輸出,最終只能放到中斷函數中執行后期寄存器值更新才能夠生成PWM脈沖波形。

主流大數據調度工具DolphinScheduler之數據ETL流程

今天給大家分享主流大數據調度工具DolphinScheduler,以及數據的ETL流程。 一:調度工具DS 主流大數據調度工具DolphinScheduler, 其定位:解決數據處理流程中錯綜復雜的依賴關系 任務支持類型:支持傳統的shell任務&a…

Python學習4---迭代器和生成器的區別

一、迭代器 定義:迭代器是一個可以記住遍歷的位置的對象。迭代器對象必須實現兩個方法,iter() 和 next()。字符串、列表或元組等數據類型都是可迭代對象,但它們不是迭代器,因為它們不具有 next() 方法。迭代器對象用于遍歷可迭代對…

冷卻塔由那些配件組成

1、淋水填料 將需要冷卻的水(熱水)多次濺灑成水滴或形成水膜,以增加水和空氣的接觸面積和時間,促進水和空氣的熱交換。 填料在開式橫流冷卻塔的作用是增加循環水與空氣的接觸面積,并延長冷卻水停留在空氣中的時間&am…

LabVIEW工業設備姿態監測系統

開發了一種基于LabVIEW的工業設備姿態監測系統,針對現有監測設備在適應性和反應時間上的不足,采用了LabVIEW軟件和STM32微控制器,通過高精度姿態傳感器實現了對設備姿態的快速準確監測,大大提高了工業作業的安全與效率。 項目背景…

C++深度解析教程筆記9-靜態成員變量,靜態成員函數,二階構造,友元,函數重載,操作符重載

C深度解析教程筆記9 第25課 - 類的靜態成員變量實驗-數對象個數(失敗)實驗-靜態變量小結 第26課 - 類的靜態成員函數實驗-修改對象的靜態變量數值實驗-利用靜態成員函數實驗-靜態變量靜態函數實現統計對象個數小結 第27課 - 二階構造模式實驗-初始化是否…

百度人臉識別Windows C++離線sdk C#接入

百度人臉識別Windows C離線sdk C#接入 目錄 說明 設計背景 ? 場景特點: ? 客戶特點: ? 核心需求: SDK 包結構 效果 代碼 說明 自己根據SDK封裝了動態庫,然后C#調用。 功能接口 設計背景 ? 場景特點: -…

【滲透入門】XSS

文章目錄 XSS漏洞XSS舉例XSS類型防御方式 XSS漏洞 XSS(Cross-Site Scripting,跨站腳本攻擊)是一種常見的Web應用程序安全漏洞。XSS漏洞發生在應用程序未能充分過濾用戶提供的數據,使得惡意腳本得以在不知情的用戶的瀏覽器中被執行…

ARFoundation系列講解 - 91 Immersal 簡介

一、Immersal 簡介 Immersal是一家專注于增強現實(AR)技術的公司,致力于開發和推廣空間感知解決方案(簡稱:大空間技術)。他們的核心產品是一個名為Immersal SDK的開發工具包,通過視覺定位(VPS)能夠輕松地在現實世界中實現高精度的定位和增強現實體驗。 二、Immersal …

Spring Boot集成Knife4j:實現高效API文檔管理

Spring Boot集成Knife4j:實現高效API文檔管理 在軟件開發過程中,編寫和維護接口文檔是一項必不可少的任務。隨著微服務架構的流行,API文檔的重要性日益凸顯。然而,傳統的手動編寫文檔方式不僅效率低下,而且容易出錯。…

支持前端路由權限和后端接口權限的企業管理系統模版

一、技術棧 前端:iview-admin vue 后端:springboot shiro 二、基于角色的權限控制 1、路由權限 即不同角色的路由訪問控制 2、菜單權限 即不同角色的菜單列表展示 3、按鈕權限 即不同角色的按鈕展示 4、接口權限 即不同角色的接口訪問控制 三…

數字化時代的生產革新:數字孿生平臺如何助力新質生產力

一.新質生產力 在當今快速發展的科技和信息時代,企業和組織在提高生產效率和質量方面面臨著越來越多的挑戰和機遇。新質生產力的概念應運而生,強調通過創新和技術進步,不僅提升生產的數量和速度,更重要的是優化生產方式、改善產品…

leetcode熱題100.分割等和子集(動態規劃)

分割等和子集 Problem: 416. 分割等和子集 思路 我選擇使用動態規劃的方法來解題。我們需要判斷是否可以將數組分割成兩個子集,使得這兩個子集的和相等。這個問題可以轉化為在數組中找到一個子集,使得其和等于數組總和的一半。 解題過程 首先&#xf…

消息隊列-RocketMQ

消息隊列-RocketMQ 1、RocketMQ是什么?2、RocketMQ有什么優缺點?3、消息隊列主要有哪幾種消息模型?4、RocketMQ主要使用哪種消息模型?5、RocketMQ的基本架構是怎樣的?有哪些核心組件?6、RocketMQ通過什么方式保證消息的可用性和可靠性?7、什么情況下會發生消息丟失?Roc…

設計模式大白話之裝飾者模式

想象一下,你走進一家咖啡館,點了一杯美式咖啡。但是,你可能還想根據自己的口味添加一些東西,比如奶泡、巧克力粉、焦糖醬或是肉桂粉。每次你添加一種配料,你的咖啡就會變得更豐富,同時價格也會相應增加。 在…

圖——圖的應用02最短路徑(Dijkstra算法與Floyd算法詳解),拓撲排序及關鍵路徑

前面介紹了圖的應用——01最小生成樹章節,大家可以通過下面的鏈接學習: 圖——圖的應用01最小生成樹(Prim算法與Kruskal算法詳解) 今天就講一下圖的其他應用——最短路徑,拓撲排序及關鍵路徑。 目錄 一&#xff0c…

HG/T 3655-2024 紫外光UV固化木器涂料檢測

紫外光UV固化木器涂料是指由活性低聚物、活性稀釋劑、光引發劑和其他成分組成的水性、非水性紫外光固化木器涂料,主要用于室內用木質地板、家具、裝飾板等木器的裝飾與保護。 HG/T 3655-2024紫外光UV固化木器涂料檢測項目: 測試指標 測試方法 在容器中…

成都亞恒豐創教育科技有限公司 【插畫猴子:筆尖下的靈動世界】

在浩瀚的藝術海洋中,每一種創作形式都是人類情感與想象力的獨特表達。而插畫,作為這一廣闊領域中的璀璨明珠,以其獨特的視覺語言和豐富的敘事能力,構建了一個又一個令人遐想連篇的夢幻空間。成都亞恒豐創教育科技有限公司 在眾多插…