js樹的排序

樹的前中后序遍歷

樹是一種重要的非線性數據結構,尤其是二叉樹。二叉樹的遍歷是操作樹的基礎,主要有前序遍歷、中序遍歷和后序遍歷三種方式。

前序遍歷

訪問順序:根結點 -> 左子樹 -> 右子樹。
遍歷規則:首先訪問根結點,然后遞歸地遍歷左子樹,最后遞歸地遍歷右子樹。
代碼示例:

function preOrderTraversal(node) {if (!node) return;console.log(node.val);preOrderTraversal(node.left);preOrderTraversal(node.right);
}

中序遍歷:

訪問順序:左子樹 -> 根結點 -> 右子樹。
遍歷規則:首先遞歸地遍歷左子樹,然后訪問根結點,最后遞歸地遍歷右子樹。
代碼示例:

function inOrderTraversal(node) {if (!node) return;inOrderTraversal(node.left);console.log(node.val);inOrderTraversal(node.right);
}

后序遍歷:

訪問順序:左子樹 -> 右子樹 -> 根結點。
遍歷規則:首先遞歸地遍歷左子樹,然后遞歸地遍歷右子樹,最后訪問根結點。
代碼示例:

function postOrderTraversal(node) {if (!node) return;postOrderTraversal(node.left);postOrderTraversal(node.right);console.log(node.val);
}

樹排序算法

樹排序算法是一種基于二叉搜索樹的排序算法。樹排序通過將數據插入到二叉搜索樹中,然后進行中序遍歷從而實現排序。
二叉搜索樹的節點定義:

class TreeNode {constructor(val) {this.val = val;this.left = null;this.right = null;}
}

二叉搜索樹的性質:
對于樹中的每個節點,其左子樹中的所有節點值小于該節點值,右子樹中的所有節點值大于該節點值。
樹排序的實現:
構建二叉搜索樹:將待排序數據依次插入到二叉搜索樹中。
插入節點到二叉搜索樹:

function insert(root, val) {if (!root) return new TreeNode(val);if (val < root.val) {root.left = insert(root.left, val);} else {root.right = insert(root.right, val);}return root;
}

中序遍歷:對二叉搜索樹進行中序遍歷,得到一個有序序列。
代碼示例:

function inOrderTraversalCollect(root, sortedArray) {if (!root) return;inOrderTraversalCollect(root.left, sortedArray);sortedArray.push(root.val);inOrderTraversalCollect(root.right, sortedArray);
}

樹排序:

function treeSort(arr) {let root = null;for (let val of arr) {root = insert(root, val);}let sortedArray = [];inOrderTraversalCollect(root, sortedArray);for (let i = 0; i < arr.length; i++) {arr[i] = sortedArray[i];}
}// 測試樹排序
let arr = [5, 3, 8, 1, 2, 9];
console.log("排序前:");
console.log(arr);
treeSort(arr);
console.log("排序后:");
console.log(arr);

復雜度分析:
平均時間復雜度:O(n log n),其中 n 是待排序的元素個數。
最壞時間復雜度:O(n^2),當數據已經有序時,二叉搜索樹會退化為鏈表結構。
優化方法:使用平衡二叉搜索樹(如 AVL 樹或紅黑樹)代替普通二叉搜索樹,確保樹的高度保持在 O(log n),從而保證時間復雜度為 O(n log n)。

總結
樹的前中后序遍歷是操作二叉樹的基礎,通過遞歸實現可以方便地訪問樹中的節點。樹排序算法是一種基于二叉搜索樹的排序算>法,通過中序遍歷可以得到有序序列。雖然樹排序的時間復雜度在平均情況下為 O(n log n),但在最壞情況下會退化為 O(n^2)。>使用平衡二叉搜索樹可以有效地優化樹排序算法的性能。

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

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

相關文章

解碼 Red Stuff:Walrus 高效可靠存儲的引擎

Red Stuff 是 Walrus 所采用的二維&#xff08;2D&#xff09;糾刪碼協議&#xff0c;定義了數據如何被編碼和存儲。它是實現高效、安全、且高可用的去中心化存儲的關鍵。通過 Red Stuff&#xff0c;Walrus 成功解決了去中心化存儲系統常見的三大難題&#xff1a;安全性、復制效…

【ACP】阿里云云計算高級運維工程師--ACP

文章目錄1、簡要介紹2、核心特點3、考試相關信息4、適合人群1、簡要介紹 阿里云云計算認證ACP&#xff08;Alibaba Cloud Certified Professional&#xff09;是面向云計算技術與應用從業者的專業級認證&#xff0c;旨在評估考生對阿里云云計算產品的理解、部署、運維及最佳實…

快速掌握Python編程基礎

干貨分享&#xff0c;感謝您的閱讀&#xff01;備注&#xff1a;本博客將自己初步學習Python的總結進行分享&#xff0c;希望大家通過本博客可以在短時間內快速掌握Python的基本程序編碼能力&#xff0c;如有錯誤請留言指正&#xff0c;謝謝&#xff01;&#xff08;持續更新&a…

「Java案例」雞兔同籠問題

案例解析 雞兔同籠求解 《孫子算經》是中國古代重要的數學著作&#xff0c;成書于南北朝時期&#xff0c;其中就記載了一個有趣的問題&#xff1a;雞和兔在同一個籠子里&#xff0c;雞和兔共有n條腿&#xff0c; m個頭&#xff0c;問雞和兔各有多少只&#xff1f;編寫一個程序…

BLDC電機-運動控制---stm32時鐘樹定時器SYSTICKRTC的學習

一、時鐘樹 二、基本定時器 三、通用定時器 四、高級定時器 五、SYSTICK 六、RTC

Implementing a User-Defined Preconditioner in PETSc

文章目錄Implementing a User-Defined Preconditioner in PETScBasic ApproachExample ImplementationUsing Your PreconditionerAdvanced OptionsImportant NotesUsing PCShell to Implement User-Defined Preconditioners in PETScBasic Implementation StepsAdvanced Featur…

DotNetBrowser 3.3.0 版本發布啦!

#Chromium 137 安全修復一次調用即可下載 URL更新了 Widevine APIDOM 元素絕對邊界 &#x1f517; 點擊此處了解更多詳情。 &#x1f193; 獲取 30 天免費試用。

Android-自定義View的實戰學習總結

一、自定義View歌詞界面LrcView 類-->自定義的歌詞視圖1. 構造函數和屬性初始化自定義 View 通常需要提供多個構造函數以支持不同的初始化方式。在 LrcView 中&#xff0c;提供了四個構造函數&#xff0c;最終調用 super 父類構造函數完成初始化&#xff0c; context.obtain…

Maven 在 Eclipse 中的使用指南

Maven 在 Eclipse 中的使用指南 概述 Maven 是一個強大的構建自動化工具,用于項目管理和構建。它簡化了項目構建、依賴管理和項目報告等任務。Eclipse 是一個流行的集成開發環境(IDE),支持多種編程語言,包括 Java。本文將詳細介紹如何在 Eclipse 中使用 Maven 進行項目管…

zxing去白邊

2025年了&#xff0c;可能干不了幾年了&#xff0c;還能寫這種文章還是有點可笑。 背景 zxing庫生成的二維碼自帶白邊 分析 生產二維碼主要分兩步&#xff1a; 1.用QRCodeWriter生成BitMatrix信息 2.根據信息生成bitmap 問題在1。 生成二維碼的尺寸實際是有一些規格的&a…

Linux操作系統之文件(三):緩沖區

前言&#xff1a; 上節課我們講授重定向的概念時&#xff0c;曾提到了一點緩沖區的概念。本文將會為大家更詳細的帶來緩沖區的有關內容&#xff1a;用戶級緩沖區是什么&#xff0c;以及其與內核級緩沖區的關系&#xff0c;最后&#xff0c;我會為大家模擬實現一下stdio.h的關于…

Linux云計算基礎篇(7)

一、< 輸入重定向 wc -l < filelist .txt 統計數據&#xff0c;從file這個文件拿結果。 二、tr 轉換字符命令 $ tr A-Za-z<.bash_profile 將bash_profile文件中的大寫字符全部轉成小寫字符 三、管道符&#xff08;|&#xff09; com…

【學習筆記】Lean4基礎 ing

文章目錄 概述參考文檔運行程序elan 命令行工具lean 命令行工具lake 命令行工具運行單文件程序Hello, world!驗證 Lean4 證明 運行多文件項目 Lean4 基礎語法注釋表達式求值變量和定義定義類型變量 定義函數命名規則命名空間數據類型結構體構造子模式匹配多態List 列表Option 可…

FPGA實現40G網卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架構,提供工程源碼和技術支持

目錄 1、前言工程概述免責聲明 3、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目我這里已有的以太網方案 4、工程詳細設計方案工程設計原理框圖測試用電腦PClE4CDMA40G/50G Ethernet subsystem工程源碼架構驅動和測試文件 5、Vivado工程詳解1詳解&a…

SAP從入門到放棄系列之流程管理概述

文章目錄前言1.Process Management&#xff08;過程管理&#xff09;2.關鍵術語2.1Control recipe destination2.2 Process instruction characteristic2.3 Process message characteristic2.4 Process instruction category2.5 Process message category2.6 PI sheet3.關鍵配置…

RCLAMP0554S.TCT升特Semtech 5通道TVS二極管,0.5pF+20kV防護,超高速接口!

RCLAMP0554S.TCT&#xff08;Semtech&#xff09;產品解析與推廣文案 一、產品定位 RCLAMP0554S.TCT是Semtech&#xff08;升特半導體&#xff09;推出的5通道超低電容TVS二極管陣列&#xff0c;專為超高速數據接口&#xff08;USB4/雷電4/HDMI 2.1&#xff09;提供靜電放電&a…

【人工智能】DeepSeek的AI實驗室:解鎖大語言模型的未來

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 DeepSeek作為中國AI領域的先鋒,以其開源大語言模型(LLM)DeepSeek-V3和DeepSeek-R1在全球AI研究中掀起波瀾。本文深入探討DeepSeek AI實驗…

nacos+nginx動態配置大文件上傳限制

前言 今天還要跟大家分享的一個點就是微服務網關gateway用webflux響應式不用servlet后&#xff0c;引發的一個忽略點差點在演示的時候炸鍋&#xff0c;也不多講廢話&#xff0c;說說現象&#xff0c;說說處理就了事。 一、上傳超過20MB的視頻報錯 配置在nacos里&#xff0c;讀…

mr 任務運行及jar

mainclass如下&#xff1a;LoggingDriver

Python 數據分析:numpy,抽提,整數數組索引與基本索引擴展(元組傳參)。聽故事學知識點怎么這么容易?

目錄1 代碼示例2 歡迎糾錯3 論文寫作/Python 學習智能體------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右Sm…