一個月速刷leetcodeHOT100 day13 二叉樹結構 以及相關簡單題

樹是一種分層數據的抽象模型

二叉樹

二叉樹中的節點最多只能有兩個子節點,一個是左側子節點,另一個是右側子節點

二叉搜索樹

二叉搜索樹(BST)是二叉樹的一種,但是只允許你在左側節點存儲(比父節點)小的值,在右側節點存儲(比父節點)大的值。

二叉樹的遍歷

中序遍歷是一種以上行順序訪問BST所有節點的遍歷方式,也就是以從最小到最大的順序訪問所有節點中序追歷的一種應用就是對樹進行排序操作

先序遍歷是以優先于后代節點的順序訪問每JJ k個節點的。先序遍歷的一種應用是打印一個結構
化的文檔。

后序遍歷則是先訪問節點的后代節點,再訪問節點本身。后序遍歷的一種應用是計算一個目錄及其子目錄中所有文件所占空間的大小

封裝一個二叉搜索樹

const Compare = {less: -1,bigger: 1,equ:0}class Node{constructor(val){this.val = valthis.left = nullthis.right = null}}class BST{constructor(){this.root = null}insert(val){if(this.root === null){this.root = new Node(val)}else{this.insertNode(this.root,val)}}insertNode(node,val){if(this.compareFn(val,node.val) ===Compare.less){if(node.left === null){node.left = new Node(val)}else{this.insertNode(node.left,val)}}else{if(node.right === null){node.right = new Node(val)}else{this.insertNode(node.right,val)}}}compareFn(a,b){if(a ===b){return Compare.equ}return a <b ? Compare.less : Compare.bigger}inOrderMap(callback){// this.inOrderMapNode(this.root,callback)this.preOrderMapNode(this.root,callback)// this.postOrderMapNode(this.root,callback)}//中序遍歷inOrderMapNode(node,callback){if(node!=null){this.inOrderMapNode(node.left,callback)callback(node.val)this.inOrderMapNode(node.right,callback)}}//先序遍歷preOrderMapNode(node,callback){if(node!=null){callback(node.val)this.preOrderMapNode(node.left,callback)this.preOrderMapNode(node.right,callback)}}//后序遍歷postOrderMapNode(node,callback){callback(node.val)this.postOrderMapNode(node.left,callback)this.postOrderMapNode(node.right,callback)}//最小子節點minNode(){let current = this.rootwhile(current != null && current.left !=null){current = current.left}return current.val}maxNode(){let current = this.rootwhile(current != null && current.right!=null){current = current.right}return current.val}search(val){return this.searchNode(this.root,val)}searchNode(node,val){if(node === null){return false}if(this.compareFn(val,node.val) === Compare.less){return this.searchNode(node.left,val)}else if(this.compareFn(val,node.val) === Compare.bigger){return this.searchNode(node.right,val)}else{return true}}}let myTree = new BST()myTree.insert(100)myTree.insert(110)myTree.insert(80)myTree.insert(90)myTree.insert(70)console.log(myTree)myTree.inOrderMap((val) => {console.log(val)})

相關簡單題

二叉樹的中序遍歷

給定一個二叉樹的根節點?root?,返回?它的?中序?遍歷?。
示例 1:

**輸入:**root = [1,null,2,3]
輸出:[1,3,2]

示例 2:

**輸入:**root = []
輸出:[]

示例 3:

**輸入:**root = [1]
輸出:[1]

var inorderTraversal = function(root) {const ans=[];const dfs=root=>{if(!root){return;}dfs(root.left);ans.push(root.val);dfs(root.right);}dfs(root);return ans;};

二叉樹的最大深度

給定一個二叉樹?root?,返回其最大深度。

二叉樹的?最大深度?是指從根節點到最遠葉子節點的最長路徑上的節點數。

示例 1:

**輸入:**root = [3,9,20,null,null,15,7]
**輸出:**3

示例 2:

**輸入:**root = [1,null,2]
**輸出:**2

提示:

  • 樹中節點的數量在?[0, 104]?區間內。
  • -100 <= Node.val <= 100
    思路:節點不為空時則分別求左右子樹的高度的最大值,同時加?1?表示當前節點的高度,返回該數值
var maxDepth = function(root) {if(!root) {return 0;} else {const left = maxDepth(root.left);const right = maxDepth(root.right);return Math.max(left, right) + 1;}};

翻轉二叉樹

給你一棵二叉樹的根節點?root?,翻轉這棵二叉樹,并返回其根節點。

示例 1:

**輸入:**root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]

示例 2:

**輸入:**root = [2,1,3]
輸出:[2,3,1]

示例 3:

**輸入:**root = []
輸出:[]

var invertTree = function(root) {if (root === null) {return null;}const left = invertTree(root.left);const right = invertTree(root.right);root.left = right;root.right = left;return root;};

對稱二叉樹

  1. 對稱二叉樹
    給你一個二叉樹的根節點?root?, 檢查它是否軸對稱。

示例 1:

**輸入:**root = [1,2,2,3,4,4,3]
**輸出:**true

示例 2:

**輸入:**root = [1,2,2,null,3,null,3]
**輸出:**false


var isSymmetric = function (root) {function compare(a, b) {if (!a && b || !b && a) return falseif (!a && !b) return trueif (b.val !== a.val) return false// 下面是兩個節點相等的情況,繼續比較子節點// 將a代碼左側與b代碼右側比較const out = compare(a.left, b.right)// 將a代碼右側與b代碼左側比較const int = compare(a.right, b.left)return out && int}return compare(root.left, root.right)
};

二叉樹的直徑

給你一棵二叉樹的根節點,返回該樹的?直徑?。

二叉樹的?直徑?是指樹中任意兩個節點之間最長路徑的?長度?。這條路徑可能經過也可能不經過根節點?root?。

兩節點之間路徑的?長度?由它們之間邊數表示。

示例 1:

**輸入:**root = [1,2,3,4,5]
**輸出:**3
**解釋:**3 ,取路徑 [4,2,1,3] 或 [5,2,1,3] 的長度。

示例 2:
**輸入:**root = [1,2]
**輸出:**1
思路:最長直徑就是最深的左子樹加上最深的右子樹

var diameterOfBinaryTree = function (root) {let ans = 0const dfs = (root) => {if (!root) return 0let l = dfs(root.left)let r = dfs(root.right)ans = Math.max(ans, l + r)return Math.max(l, r) + 1}dfs(root)return ans};

將有序數組轉換為二叉搜索樹

給你一個整數數組?nums?,其中元素已經按?升序?排列,請你將其轉換為一棵?
平衡
?二叉搜索樹。

示例 1:

**輸入:**nums = [-10,-3,0,5,9]
輸出:[0,-3,9,-10,null,5]
解釋:[0,-10,5,null,-3,null,9] 也將被視為正確答案:

示例 2:

**輸入:**nums = [1,3]
輸出:[3,1]
解釋:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索樹。
思路:根據二叉搜索樹的特點 使用dfs

var sortedArrayToBST = function(nums) {const dfs = (nums) => {if (nums.length === 0) return null
// 這段代碼將數組 nums 的長度除以 2 得到的結果進行向下取整
let mid = (nums.length / 2) >> 0const root = new TreeNode(nums[mid])root.left = dfs(nums.slice(0, mid))root.right = dfs(nums.slice(mid + 1))return root}return dfs(nums)};

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

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

相關文章

測試基礎07:測試工作流程規范、進度同步與把控

課程大綱 1、迭代測試流程 2、測試流程 2.1、測試用例評審 目的&#xff1a;對齊產品需求理解&#xff0c;完善、優化測試場景。 參與方&#xff1a;項目、產品、開發、測試。 用例內容&#xff1a;冒煙用例&#xff08;主流程&#xff09; 功能用例。 2.2、冒煙測試 提測…

SOLIDWORKS正版價格多少錢

SOLIDWORKS作為目前應用較為廣泛的3D CAD軟件之一&#xff0c;具有強大的功能和實用性&#xff0c;它為各類工程設計提供綜合解決方案。但是&#xff0c;正版SOLIDWORKS價格是個不可忽視的問題。那SOLIDWORKS的正版價格究竟如何呢&#xff1f;又是受什么因素影響&#xff1f; 先…

【論文閱讀|cryoET】ICE-TIDE

簡介 三維cryoET重建的保真度進一步受到采集過程中物理擾動的影響。這些擾動以各種形式表現出來&#xff0c;例如連續采集之間的樣本漂移&#xff0c;導致連續投影未對準&#xff0c;或者由于未散射的電子而導致二維投影中的局部變形。 傳統的冷凍電子斷層掃描工作流程需要對…

單片機編程的code關鍵字的詮釋

在單片機編程中&#xff0c;code 是一個關鍵字&#xff0c;用于指示編譯器將變量存儲在程序存儲器中&#xff0c;而不是在數據存儲器中。通常情況下&#xff0c;程序存儲器的速度比數據存儲器的速度更快&#xff0c;而且程序存儲器的容量較小&#xff0c;適合存儲常量數據和程序…

mybatis加密數據庫信息

1.配置MyBatisConfig.xml <environments default"development"><!-- 默認--><environment id"development"><transactionManager type"JDBC"/><dataSource type"POOLED"><property name&quo…

朗讀亭主要作用有哪些?

朗讀亭的主要作用有以下幾個方面&#xff1a; 1. 提供朗讀服務&#xff1a;朗讀亭是一個專門的場所&#xff0c;提供給人們朗讀的環境和場地。人們可以在朗讀亭中選擇自己喜歡的書籍或文章&#xff0c;并通過朗讀將其表達出來。這樣可以幫助人們提高朗讀能力&#xff0c;增強自…

2024 angstromCTF re 部分wp

Guess the Flag 附件拖入ida 比較簡單&#xff0c;就一個異或 switcher 附件拖入ida 明文flag Polyomino 附件拖入ida 需要輸入九個數&#xff0c;然后進入處理和判斷&#xff0c;如果滿足條件則進入輸出flag部分&#xff0c;flag和輸入有關&#xff0c;所以要理解需要滿足什么…

【408真題】2009-27

“接”是針對題目進行必要的分析&#xff0c;比較簡略&#xff1b; “化”是對題目中所涉及到的知識點進行詳細解釋&#xff1b; “發”是對此題型的解題套路總結&#xff0c;并結合歷年真題或者典型例題進行運用。 涉及到的知識全部來源于王道各科教材&#xff08;2025版&…

利用C++與Python調用千帆免費大模型,構建個性化AI對話系統

千帆大模型已于2024年4月25日正式免費&#xff0c;調用這個免費的模型以實現自己的AI對話功能&#xff0c;遵循以下步驟&#xff1a; 了解千帆大模型&#xff1a; 千帆大模型是百度智能云推出的一個平臺&#xff0c;提供了一系列AI能力和工具&#xff0c;用于快速開發和應用A…

【以太網端口浪涌靜電防護設計電路】

以太網端口浪涌靜電防護設計電路 注&#xff1a;資料來自 深圳市浪拓電子技術有限公司 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖 方案圖

python如何安裝tar.gz

首先我們到官網下載tar.gz。 然后解壓我們下載的pip-9.0.1文件&#xff0c;我的解壓后放在d&#xff1a;/p下 運行cmd&#xff0c;輸入cd d:\p&#xff0c;按回車鍵&#xff0c;隨后再次輸入d: 在d:\p>的光標處輸入pip-9.0.1\setup.py install&#xff0c;然后按回車鍵。 最…

水電收費遠程抄表

1.前言&#xff1a;從傳統到現代的改變 水電收費遠程抄表&#xff0c;是科學技術在公共服務領域的一次重要運用&#xff0c;它改變了過去人力上門服務抄表的傳統模式&#xff0c;提高了高效率&#xff0c;降低了偏差&#xff0c;為群眾與企業帶來了極大的便利。這種系統運用智…

【保姆級介紹下Foxmail 郵箱】

&#x1f308;個人主頁: 程序員不想敲代碼啊 &#x1f3c6;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f44d;點贊?評論?收藏 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共…

LVM、磁盤配額

LVM與磁盤配額 一、LVM LVM(邏輯卷管理)&#xff1a;是Linux系統下對硬盤分區的管理機制。 LVM機制適合于管理管理大存儲設備。可以動態對硬盤進行擴容。 邏輯上的磁盤&#xff0c;概念上的磁盤&#xff0c;文件系統創建之后不考慮底層的物理磁盤。 若干個磁盤分區或者物理…

LORA微調,讓大模型更平易近人

技術背景 最近和大模型一起爆火的&#xff0c;還有大模型的微調方法。 這類方法只用很少的數據&#xff0c;就能讓大模型在原本表現沒那么好的下游任務中“脫穎而出”&#xff0c;成為這個任務的專家。 而其中最火的大模型微調方法&#xff0c;又要屬LoRA。 增加數據量和模…

【數據結構與算法 | 鏈表篇】力扣876

1. 力扣876 : 鏈表的中間節點 (1). 題 給你單鏈表的頭結點 head &#xff0c;請你找出并返回鏈表的中間結點。 如果有兩個中間結點&#xff0c;則返回第二個中間結點。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5] 輸出&#xff1a;[3,4,5] 解釋&#xff1a;鏈表…

技術架構設計指南:從需求到實現

技術架構是軟件系統的骨架&#xff0c;它決定了系統的性能、可靠性、擴展性等關鍵特性。本文將介紹技術架構設計的一般步驟和方法。 第一步&#xff1a;需求分析 在設計技術架構之前&#xff0c;首先要對系統需求進行全面深入的分析。這包括功能需求、非功能需求&#xff08;如…

java使用jdbcTemplatep批量插入數據

JdbcTemplate 是 Spring 框架中提供的一個簡化 JDBC 操作的工具類&#xff0c;它封裝了 JDBC 的核心功能&#xff0c;使得開發者能夠更方便、簡潔地進行數據庫操作。 下面是一個使用 JdbcTemplate 進行批量插入的示例&#xff1a; import org.springframework.jdbc.core.Batch…

理解OAuth:服務間的授權機制

理解OAuth:服務間的授權機制 好的,讓我來教你一下關于這個奇怪的東西。 在不同的項目中,認證有很多不同的方式。但在我們深入探討它的使用方式之前,讓我們先來看看它最初的用途。 首先,我們可以從名稱中得到一些線索。“auth”這個詞與什么有關呢?問題是,這里的“aut…

開抖店必須要辦理營業執照嗎?不用營業執照開店的個人店能用嗎?

大家好&#xff0c;我是電商花花。 可能大家都發現了&#xff0c;抖音小店個人店不用營業執照&#xff0c;只憑借身份證就能開店。 但是這個個人店花花并不建議大家去開&#xff0c;雖然說用用身份證也能開店&#xff0c;有效的幫我們減少了開店的成本&#xff0c;但是個人店…