[問題] Leetcode 1660,tree的問題

看板Python作者 (薇薇安安)時間3年前 (2021/08/18 11:33), 編輯推噓3(3014)
留言17則, 2人參與, 3年前最新討論串1/1
各位版友好,在刷leetcode 1660時碰到了一個問題,但不知錯誤在哪。 我的想法是使用BFS,逐個level找題目所要的invalid node,找到的話就將invalid node 的本身,以及其左右子樹設為None。 以下是我的code: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution(object): def correctBinaryTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ queue = collections.deque([root]) while queue: visited = set() for _ in range(len(queue)): curr = queue.popleft() visited.add(curr) if curr.right in visited: curr.left = None curr.right = None curr = None continue if curr.right: queue.append(curr.right) if curr.left: queue.append(curr.left) return root 但是,對於這個test case: [1,2,3] 2 3 我所return的還是原本的樹:[1,2,3],顯然invalid node沒有被設為None。請問是為什 麼呢? 我先謝謝各位願意看完我的問題,有不清楚的地方我會再補充! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.26.70 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1629257599.A.4EB.html

08/18 11:44, 3年前 , 1F
你的queue先塞的是3再來是2吧,所以找不到
08/18 11:44, 1F

08/18 11:52, 3年前 , 2F
喔我看錯了 先塞右子樹是對的
08/18 11:52, 2F

08/18 12:00, 3年前 , 3F
因為我不是用python刷,所以不太確定,但看起來有兩種
08/18 12:00, 3F

08/18 12:00, 3年前 , 4F
可能,一是set 沒找到,二是curr = None這行沒改到,
08/18 12:00, 4F

08/18 12:00, 3年前 , 5F
可以檢查看看
08/18 12:00, 5F

08/18 12:24, 3年前 , 6F
我看Discuss裡的解法都是去紀錄每個節點的父節點
08/18 12:24, 6F

08/18 12:24, 3年前 , 7F
找到invalid node後再由invalid node的父節點去改
08/18 12:24, 7F

08/18 12:25, 3年前 , 8F
那個方法我懂,但我想知道這個方法為什麼行不通
08/18 12:25, 8F

08/18 12:26, 3年前 , 9F
curr = None 這行,我測試是有改到....
08/18 12:26, 9F

08/18 16:21, 3年前 , 10F
我剛剛檢查了id ,發現curr=None 讓curr 這個變數refe
08/18 16:21, 10F

08/18 16:21, 3年前 , 11F
r to None value, which is a new space
08/18 16:21, 11F

08/18 21:40, 3年前 , 12F
不懂耶,把curr的ref設為null不是我們想要的嗎?
08/18 21:40, 12F

08/18 23:22, 3年前 , 13F
是新設一個存 None的空間,然後curr 這個指針指過去,
08/18 23:22, 13F

08/18 23:22, 3年前 , 14F
所以原本的 node(2)還留著
08/18 23:22, 14F

08/18 23:27, 3年前 , 15F
所以你是改指針指去的位置,而不是指針原本指的空間的
08/18 23:27, 15F

08/18 23:27, 3年前 , 16F
08/18 23:27, 16F

08/19 23:40, 3年前 , 17F
謝謝,我懂了,這樣的話只能由父節點去改了
08/19 23:40, 17F
文章代碼(AID): #1X77z_Jh (Python)
文章代碼(AID): #1X77z_Jh (Python)