Leetcoder Day17| 二叉樹 part06

語言:Java/C++?

654.最大二叉樹

給定一個不含重復元素的整數數組。一個以此數組構建的最大二叉樹定義如下:

  • 二叉樹的根是數組中的最大元素。
  • 左子樹是通過數組中最大值左邊部分構造出的最大二叉樹。
  • 右子樹是通過數組中最大值右邊部分構造出的最大二叉樹。

通過給定的數組構建最大二叉樹,并且輸出這個樹的根節點。

示例 :

題目中說了輸入的數組大小一定是大于等于1的,所以我們不用考慮小于1的情況,那么當遞歸遍歷的時候,如果傳入的數組大小為1,說明遍歷到了葉子節點了。那么應該定義一個新的節點,并把這個數組的數值賦給新的節點,然后返回這個節點。

隨后找當前整個數組的最大值,根據最大值的下標將數組分為左子樹和右子樹,繼續遞歸進行構建。

class Solution {TreeNode traversal(int[] nums, int left, int right){if(right <= left ) return null;  //判空if(right-left==1){ //判斷是否為一個節點,左閉右開return new TreeNode(nums[left]);}int maxIdx=left;int maxValue=nums[left];for(int i=left+1;i<right;i++){if(nums[i]>maxValue){maxValue=nums[i];maxIdx=i;}}TreeNode node = new TreeNode(maxValue);node.left=traversal(nums, left, maxIdx);node.right=traversal(nums, maxIdx+1, right);return node;}public TreeNode constructMaximumBinaryTree(int[] nums) {return traversal(nums, 0, nums.length);}   
}

617.合并二叉樹?617.合并二叉樹?

給定兩個二叉樹,想象當你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節點便會重疊。

你需要將他們合并為一個新的二叉樹。合并的規則是如果兩個節點重疊,那么將他們的值相加作為節點合并后的新值,否則不為?NULL 的節點將直接作為新二叉樹的節點。

這道題我的第一個想法是建立一個哈希表,層次遍歷并存儲第一個樹的位置和值,如果該位置沒有節點則為-1,隨后創建新的節點,遍歷第二個樹,若當前位置已經有節點,則將兩個節點值相加返回;如果第二棵樹沒有節點,但第一棵樹有,則直接返回第一棵樹的值;如果第一棵樹沒有節點,則直接返回第二棵樹的值;若第二棵樹的節點數少于第一棵樹,則在遍歷完第二棵樹后直接將第一棵樹的剩余節點返回。但是這個思路無疑增加了很多復雜性,其實遍歷兩棵樹和遍歷一棵樹的思路是一樣的,采用前序遍歷即可。

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1==null && root2!=null) return root2; if(root2==null && root1!=null) return root1; if (root1 == null && root2 == null) return null;TreeNode root=new TreeNode(root1.val+root2.val);root.left=mergeTrees(root1.left,root2.left);root.right=mergeTrees(root1.right, root2.right);return root;}
}

700.二叉搜索樹中的搜索

給定二叉搜索樹(BST)的根節點和一個值。 你需要在BST中找到節點值等于給定值的節點。 返回以該節點為根的子樹。 如果節點不存在,則返回 NULL。

例如,

因為本文的題設是二叉搜索樹,所以這題就相對好辦了,二叉搜索樹是有序樹:

  • 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
  • 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
  • 它的左、右子樹也分別為二叉搜索樹

因此,找到值等于val的點然后遞歸返回從這個點以后的樹即可:

class Solution {TreeNode traversal(TreeNode root, int val){if(root==null||root.val==val) return root;if(root.val>val){return traversal(root.left, val);}else{return traversal(root.right, val);}}public TreeNode searchBST(TreeNode root, int val) {return traversal(root, val);}
}

98.驗證二叉搜索樹

給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。

假設一個二叉搜索樹具有如下特征:

  • 節點的左子樹只包含小于當前節點的數。
  • 節點的右子樹只包含大于當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜索樹。

考研時數據結構里有一個結論:中序遍歷下,輸出的二叉搜索樹節點的數值是有序序列,因此可以先將樹轉換為列表或數組,再判斷是否有序即可。注意在Java中,如果將樹轉換為列表List,則需要用.get和size()來獲取列表的值和長度,如果是數組,因為不知道樹的節點個數,所以需要先設置一個很大的值,所以也可以先將樹轉換為列表,再將列表轉換為數組。

class Solution {public void traversal(TreeNode root, List<Integer> vec){if(root==null) return;traversal(root.left, vec);vec.add(root.val);traversal(root.right, vec);}public boolean isValidBST(TreeNode root) {List<Integer> res=new ArrayList<Integer>();traversal(root, res); // 將列表轉換為數組Integer[] arr=res.toArray(new Integer[res.size()]);  for(int i=1; i<arr.length;i++){if(arr[i]<=arr[i-1]) {return false; }}return true;}
}

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

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

相關文章

進程間傳遞 SQL 文的方法

SQL 文組成 SQL 文有 2 部分組成&#xff1a; SQL 原型&#xff0c;如&#xff1a;INSERT INTO test1 (id,name) VALUES (?,?)Args &#xff0c;? 號對應的值列表 有時&#xff0c;生成 SQL 文的進程和處理 SQL 文的進程&#xff0c;可能不是同一個 這里就涉及到如何高效…

免費搭建個人網盤

免費搭建一個屬于個人的網盤。 服務端 詳情請參考原網站的服務端下載和安裝虛擬磁盤Fuse4Ui可以支持把網盤內容掛載成系統的分區&#xff1b; 掛載工具效果圖&#xff1a;應用端應用端的下載 效果圖

藍橋杯第1374題——鍛造兵器

題目描述 小明一共有n塊鍛造石&#xff0c;第塊鍛造石的屬性值為ai. 現在小明決定從這n塊鍛造石中任取兩塊來鍛造兵器 通過周密計算&#xff0c;小明得出&#xff0c;只有當兩塊鍛造石的屬性值的差值等于C&#xff0c;兵器才能鍛造成功 請你幫小明算算&#xff0c;他有多少種選…

人工智能幾個關鍵節點:深藍,AlphaGo,ChatGPT,Sora

近30年&#xff0c;人工智能幾個關鍵節點&#xff1a;深藍&#xff0c;AlphaGo&#xff0c;ChatGPT&#xff0c;Sora 深藍&#xff1a; 1997年&#xff0c;深藍擊敗卡斯帕羅夫的比賽是通過一系列復雜的算法和策略實現的。深藍的開發團隊使用了一種名為“暴力搜索”的技術&…

OGG-00918 映射中缺少鍵列 id.

2024-02-23 14:54:49 INFO OGG-02756 從線索文件獲取了表 GISTAR.PXPH_PON_ROUTE 的定義。. The following columns did not default because of type mismatches: id OGG-00918 映射中缺少鍵列 id. 目標端有字段ID&#xff0c;由于mysql自增&#xff0c;所以只能是b…

短劇小程序系統,重塑視頻觀看體驗的科技革命

隨著科技的飛速發展&#xff0c;人們對于數字化內容的消費需求也在不斷增長。在這個大背景下&#xff0c;短劇小程序作為一種新型的視頻觀看方式&#xff0c;正逐漸受到大眾的青睞。本文將探討短劇小程序的發展背景、特點以及市場前景&#xff0c;分析其在重塑視頻觀看體驗方面…

如何使用Inno Setup制作Unity構建程序的Windows安裝程序

1. 準備 &#xff08;1&#xff09;準備好Unity構建的程序集合 必須包括&#xff1a; Data文件夾&#xff08;xxx_Data&#xff09; Mono文件夾&#xff08;MonoBleedingEdge&#xff09; 打包的應用程序文件&#xff08;xxx.exe&#xff09; Unity播放器dll文件&#xff…

SpringBoot+Docker:高效容器化的最佳實踐

首先為什么要使用 Docker&#xff1f; Docker 是一個強大的工具&#xff0c;它允許開發者將他們的應用程序打包到容器中&#xff0c;以便可以在任何平臺上輕松部署和運行。當涉及到對 Spring Boot 應用程序進行 Docker 化時&#xff0c;每個開發人員都應該遵循一些最佳實踐&am…

編程筆記 Golang基礎 017 數據類型:字符串類型

編程筆記 Golang基礎 017 數據類型&#xff1a;字符串類型 一、字符串類型小結 在Go語言中&#xff0c;字符串&#xff08;string&#xff09;是一種基本的數據類型&#xff0c;用于表示文本數據。它是一個不可變的字符序列&#xff0c;由UTF-8編碼的字節組成&#xff0c;支持U…

深入URP之Shader篇15: Shader關鍵字和變體

之前說了很多shader關鍵字的事情&#xff0c;本篇好好說一下關鍵字和變體。 關鍵字是干什么的 我們寫shader的時候&#xff0c;經常會遇到需要處理不同的情況&#xff0c;比如是否啟用霧&#xff0c;光源是平行光還是點光源&#xff0c;是否使用法線貼圖等等。如果為每一種情…

基于springboot+vue的大創管理系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

【selenium】執行 Javascript 腳本 滾動、元素的特殊操作等

某些特殊情況下&#xff0c;使用selenium的api無法操作頁面元素&#xff0c;點擊、滾動實現的某些功能&#xff0c;可以考慮通過執行js來完成。 為什么不用js寫自動化&#xff1f;——selenium第一版是js寫的&#xff0c;但js兼容性存在問題&#xff0c;所以引入webdriver 現在…

ad15 PCB3D模型導出到SOLIDWORKS

注意&#xff0c;工程文件目錄不能用中文&#xff0c;否則導出的文件會不存在 將這個文件直接拖到 SOLIDWORKS 中 下一步很關鍵 顯示出來了 另存為一個轉配體就可以了

12 個對開發人員有用的 Python 腳本

目錄 Create strong random passwordsExtract text from a PDFText processing with PandocManipulate audio with PydubFilter textLocate addressesConvert a CSV to ExcelPattern match with regular expressionsConvert images to JPGCompress imagesGet content from Wiki…

FPS游戲之漫談網絡抖動引發客戶端的卡頓優化

話說各位大神 你們遇到過因為網絡抖動導致客戶端的卡頓現象嗎&#xff0c;或者說測試反饋模擬弱網環境的時候某個功能點會卡頓一下&#xff0c;然后通過各種定位&#xff0c;發現原來是一次性下發了好多包&#xff1f;&#xff1f;&#xff1f;&#xff1f; 問題來了如果我們在…

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(14)

自己挖了一個坑,準備做SS928/SD3403的Yolov8的移植,主要是后臺私信太多人在問相關的問題。先別著急去寫代碼,因為在hi3516dv500下的移植還是比較順利。之前在hi3519av100和hi3559av100系列時遇到過一些問題,所以沒有繼續去移植新的算法。 SS928架構乍一看和hi3559av100特別…

Ubuntu系統本地部署Inis博客結合內網穿透實現遠程訪問本地站點

文章目錄 前言1. Inis博客網站搭建1.1. Inis博客網站下載和安裝1.2 Inis博客網站測試1.3 cpolar的安裝和注冊 2. 本地網頁發布2.1 Cpolar臨時數據隧道2.2 Cpolar穩定隧道&#xff08;云端設置&#xff09;2.3.Cpolar穩定隧道&#xff08;本地設置&#xff09; 3. 公網訪問測試總…

git 使用總結

文章目錄 git merge 和 git rebasegit mergegit rebase總結 git merge 和 git rebase git merge git merge 最終效果說明&#xff1a; 假設有一個倉庫情況如下&#xff0c;現需要進行 merge&#xff1a; merge 操作流程&#xff1a; merge 的回退操作&#xff1a; git reba…

Java適配器模式 - 靈活應對不匹配的接口

Java適配器模式 - 靈活應對不匹配的接口 引言&#xff1a; 在軟件開發中&#xff0c;我們經常遇到不同系統、庫或框架之間的接口不兼容問題。為了解決這些問題&#xff0c;我們可以使用適配器模式。適配器模式是一種結構型設計模式&#xff0c;它允許不兼容的接口之間進行協作…

用Python采集動態網頁Requests就不那么好用了,試試Selenium

Requests + BeautifulSoup + 額外的庫: 對于一些簡單的動態內容,你能通過分析網絡請求來找到并直接獲取這些數據。 使用 requests 庫來發送 HTTP 請求,并使用 BeautifulSoup 來解析 HTML。 對于 AJAX 請求,你可能需要使用額外的庫(如 mitmproxy 或 BrowserMob Proxy)來…