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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode Algorithm 606. 根据二叉树创建字符串

發布時間:2024/5/17 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode Algorithm 606. 根据二叉树创建字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

606. 根據二叉樹創建字符串

Ideas

把我珍藏多年的二叉樹前序遍歷代碼模板呈上來:

def preorderTraversalLoop(node):if not node:returnstack = [node] # list 模擬 stackwhile stack:tmp = stack.pop()print(tmp.value, end=' ')if tmp.right:stack.append(tmp.right)if tmp.left:stack.append(tmp.left)

這是通過列表來模擬棧進行非遞歸前序遍歷的代碼,但是這道題跟前序遍歷還有所不同,還需要輸出額外的括號。

我們來分析一下,有以下4種情況:

  • 當前節點有兩個孩子,需要在兩個孩子的結果外都加上一層括號
  • 當前節點沒有孩子,不需要在節點后面增加任何括號
  • 當前節點只有左孩子沒有右孩子,那么只需要給左孩子的結果外加上一層括號
  • 當前節點只有右孩子沒有左孩子,此時在輸出右孩子之前需要先輸出一對空括號,表示左孩子為空,右孩子的結果外加上一層括號
  • 對于某一個節點的括號輸出情況,我們需要在節點值輸出之前打印一個"(",然后在這顆子樹輸出完之后再輸出一個")"。

    也就是說,我們在第一次到達某個節點時輸出左括號和節點值,然后將節點壓入棧中,遍歷完了子樹之后,再回到這個節點時,輸出一個右括號。

    為了所有節點統一處理,我們在根節點之前也要輸出一個括號,保證統一,最后再把最外層的括號去掉就可以了。

    Code

    Python

    class Solution:def tree2str(self, root: Optional[TreeNode]) -> str:if not root:return ''stack = [root]visit, ans = set(), ""while stack:item = stack[-1]if item in visit:stack.pop()ans += ')'else:visit.add(item)ans += f"({item.val}"if item.left is None and item.right is not None:ans += "()"if item.right:stack.append(item.right)if item.left:stack.append(item.left)return ans[1:-1]

    總結

    以上是生活随笔為你收集整理的LeetCode Algorithm 606. 根据二叉树创建字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。