日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

js怎么取到遍历中的特定值_LeetCode 1028 hard 从先序遍历还原二叉树 Python解题记录...

發(fā)布時(shí)間:2025/3/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js怎么取到遍历中的特定值_LeetCode 1028 hard 从先序遍历还原二叉树 Python解题记录... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們?cè)谠搶谥杏涗浟宋覀z的刷題記錄。

我們更新的所有題目都在目錄中。

今天的題目是

力扣?leetcode-cn.com

題目

We run a preorder depth first search on the root of a binary tree.At each node in this traversal, we output D dashes (where D is the depth of this node), then we output the value of this node. (If the depth of a node is D, the depth of its immediate child is D+1. The depth of the root node is 0.)If a node has only one child, that child is guaranteed to be the left child.Given the output S of this traversal, recover the tree and return its root.我們從二叉樹的根節(jié)點(diǎn) root 開始進(jìn)行深度優(yōu)先搜索。在遍歷中的每個(gè)節(jié)點(diǎn)處,我們輸出 D 條短劃線(其中 D 是該節(jié)點(diǎn)的深度),然后輸出該節(jié)點(diǎn)的值。(如果節(jié)點(diǎn)的深度為 D,則其直接子節(jié)點(diǎn)的深度為 D + 1。根節(jié)點(diǎn)的深度為 0)。如果節(jié)點(diǎn)只有一個(gè)子節(jié)點(diǎn),那么保證該子節(jié)點(diǎn)為左子節(jié)點(diǎn)。給出遍歷輸出 S,還原樹并返回其根節(jié)點(diǎn) root。Example 1

Input: "1-2--3--4-5--6--7"Output: [1,2,5,3,4,6,7]Example 2:

Input: "1-2--3---4-5--6---7"Output: [1,2,5,3,null,6,null,4,null,7]Example 3:

Input: "1-401--349---90--88"Output: [1,401,null,349,88,90]

思路 - DFS先序遍歷

這道題給的是先序遍歷的序列,那我們照著先序遍歷,使用一個(gè)輔助棧,把樹還原即可
在先序遍歷的過(guò)程中,如果不斷往下走,就不斷入棧,如果是往上走,就是出棧
注意,題目條件中說(shuō)了,如果結(jié)點(diǎn)只有一個(gè)子節(jié)點(diǎn),保證該子節(jié)點(diǎn)是左子節(jié)點(diǎn)。那么我們可以在建樹的時(shí)候,直接判斷當(dāng)前結(jié)點(diǎn)的左子結(jié)點(diǎn)是否存在,不存在就加入到左子節(jié)點(diǎn),存在就加入到右子節(jié)點(diǎn)
我們舉個(gè)例子直觀的說(shuō)明一下

例如: 輸入:"1-2--3--4-5" 輸出:[1,2,5,3,4,6,7]樹:stack = [] input = "1-2--3--4-5" 首先把1取出來(lái),作為整個(gè)樹的root,并入棧樹:1 stack = [1] input = "-2--3--4-5" 把2取出來(lái),以及2的depth為1 (depth為2前面的-的個(gè)數(shù)) 由于depth = len(stack),說(shuō)明還是往下走,取到棧頂1(不出棧),且1的左子樹不存在,直接把2接到1的左子樹,同時(shí)2入棧樹:1/2 stack = [1,2] input = "--3--4-5" 把3取出來(lái),以及3的depth為2 由于depth = len(stack),說(shuō)明還是往下走,取到棧頂2(不出棧),且2的左子樹不存來(lái),直接把3接到2的左子樹,同時(shí)3入棧樹:1/2/3 stack = [1,2,3] input = "--4-5" 把3取出來(lái),以及3的depth為2 由于depth < len(stack),說(shuō)明往上走了,不斷出棧,使得depth = len(stack),(這樣保證棧頂是3的父節(jié)點(diǎn)),出棧后,stack=[1,2],得到棧頂2 (不出棧),2的左子樹存在,所以把4接到2的右子樹,同時(shí)4入棧樹:1/2/ 3 4 stack = [1,2,4] input = "-5" 把5取出來(lái),以及5的depth為1 由于depth < len(stack),說(shuō)明繼續(xù)往上走,不斷出棧,使得depth=len(stack),stack=[1],得到棧頂1 (不出棧),1的左子樹存在,所以把5接到1的右子樹,5入棧樹:1/ 2 5/ 3 4

所以整個(gè)過(guò)程中,我們需要維護(hù)一個(gè)棧,同時(shí)需要寫兩個(gè)輔助函數(shù)去找當(dāng)前的結(jié)點(diǎn)值是多少,以及當(dāng)前的結(jié)點(diǎn)深度是多少
我們來(lái)看代碼

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def recoverFromPreorder(self, S: str) -> TreeNode:# 第一個(gè)輔助函數(shù),給定起始點(diǎn)的index,找結(jié)點(diǎn)值def detectNum(start):ret = 0while start < len(S) and "0" <= S[start] <= "9":ret = ret * 10 + int(S[start])start += 1# 返回結(jié)點(diǎn)值,以及下一個(gè)起始點(diǎn)的indexreturn ret, start# 第二個(gè)輔助函數(shù),給定起始點(diǎn)的index,找結(jié)點(diǎn)的深度def detectDepth(start):ret = 0while start < len(S) and S[start] == "-":ret += 1start += 1# 返回深度,以及下一個(gè)起始點(diǎn)的indexreturn ret, start if not S:return None# 找根結(jié)點(diǎn)的結(jié)點(diǎn)值val, idx = detectNum(0)# 結(jié)構(gòu)化根結(jié)點(diǎn)root = TreeNode(val)# 根結(jié)點(diǎn)入棧stack = [root]while idx < len(S):# 檢測(cè)當(dāng)前結(jié)點(diǎn)的深度depth, idx = detectDepth(idx)# 檢測(cè)當(dāng)前結(jié)點(diǎn)的結(jié)點(diǎn)值val, idx = detectNum(idx)# 如果深度小于棧的深度,不斷出棧,使得二者深度相等# 這樣使得棧頂元素是當(dāng)前結(jié)點(diǎn)的父結(jié)點(diǎn)while depth < len(stack):stack.pop()# 把父節(jié)點(diǎn)取出來(lái)parent = stack[-1]node = TreeNode(val)# 如果父節(jié)點(diǎn)無(wú)左子樹,則放到左子樹上# 反之,放到右子樹上if not parent.left:parent.left = nodeelse:parent.right = node# 當(dāng)前點(diǎn)入棧stack.append(node)return root

總結(jié)

以上是生活随笔為你收集整理的js怎么取到遍历中的特定值_LeetCode 1028 hard 从先序遍历还原二叉树 Python解题记录...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色欲人妻综合网 | 久久不卡日韩美女 | 中文字幕亚洲第一 | 久久老熟女一区二区三区 | 高清乱码免费看污 | 国产天堂在线 | 狠狠操狠狠 | 精品人妻一区二区三区蜜桃视频 | 奇米四色777 | 日韩一级在线观看 | 国产午夜手机精彩视频 | 深夜福利网站 | 欧美熟妇交换久久久久久分类 | www.中文字幕| 国产精品丝袜黑色高跟鞋的设计特点 | 亚洲欧洲日本一区二区三区 | 日批免费在线观看 | 国产精品乱码一区二三区小蝌蚪 | 美女扒开粉嫩的尿囗给男生桶 | 国产老头户外野战xxxxx | 亚洲午码 | 成人小视频免费观看 | 曰本三级日本三级日本三级 | 精产国产伦理一二三区 | 99热久久这里只有精品 | 成人国产精品久久久 | 男女激情在线观看 | 97超碰自拍 | 成人午夜网站 | 天天插日日插 | 夜色一区二区三区 | 日韩免费专区 | 一级不卡 | 成人欧美一区二区 | 在线亚洲天堂 | 91精品一区二区三区在线观看 | 能免费看黄色的网站 | 国产精品视频一区二区三 | 在线免费观看黄视频 | 黄色片a级 | 国产一区在线视频 | 亚洲熟女乱色一区二区三区 | 97超碰超碰 | 日本女优中文字幕 | 亚洲天堂手机版 | 国产奶水涨喷在线播放 | 狠狠躁夜夜 | 亚洲国产精品久久 | 男人午夜剧场 | 中出视频在线观看 | 欧美在线一级 | 无遮挡黄色 | 国产精品天天看 | 亚洲精品成人在线视频 | 91呦呦| 亚洲天堂免费观看 | 9色视频| 男女超爽视频免费播放 | 国产一区在线看 | 中日韩精品在线 | 久久婷婷影院 | 97精品人人a片免费看 | 久青草国产在线 | 久久99国产精品久久99 | 成人伊人 | 98久久久 | 手机看片在线观看 | 人人妻人人澡人人爽久久av | 国产乱妇无码大片在线观看 | a男人天堂 | 亚洲成人网络 | 精品国产一区二区三区久久 | 国产午夜无码视频在线观看 | 中文字幕在线视频第一页 | 理论片91 | 精品视频中文字幕 | 韩国中文字幕在线观看 | 国产精品无码无卡无需播放器 | 久久久久久91 | 亚洲天堂日本 | 国产黄色激情视频 | 黄色网址你懂得 | 久在操 | 91国产精品一区 | 日韩激情一区二区 | 91精品人妻一区二区三区蜜桃2 | 国产黄色一级片视频 | 欧美色xxxxx 日本精品一区二区三区四区的功能 | 国产做受入口竹菊 | 中国亚洲女人69内射少妇 | 国产色中色 | 欧美啪啪一区二区 | 男人的天堂在线视频 | 成人美女在线观看 | 秋霞午夜网 | 在线一区二区三区视频 | 婷婷6月天| 久久精品3 | 国产精品主播在线 |