Python 中刪除節點並返回森林
假設我們有一棵二叉樹的根節點,樹中的每個節點都有一個唯一的值。刪除所有值為 `to_delete` 中的值的節點後,剩下的節點構成一個森林。我們需要找到這個森林中每棵樹的根節點。
如果 `to_delete` 陣列為 [3,5],則輸出為:
為了解決這個問題,我們將遵循以下步驟:
- 定義一個數組 `res`
- 定義一個方法 `solve()`,它將接收節點、`to_delete` 陣列和一個布林型別的 `info` 引數(表示該節點是否是根節點)。該方法的工作方式如下:
- 如果節點為空,則返回 null
- 如果節點的值在 `to_delete` 陣列中,則 `flag := true`
- 如果 `flag` 為 false 且 `is_root` 為 true,則將節點插入 `res`
- 節點的左子節點 := `solve(節點的左子節點, to_delete, flag)`
- 節點的右子節點 := `solve(節點的右子節點, to_delete, flag)`
- 如果設定了 `flag`,則返回 null;否則返回 false
- 在主方法中呼叫 `solve()` 方法,例如 `solve(node, to_delete, true)`
讓我們來看下面的實現,以便更好地理解:
示例
class Solution(object): def delNodes(self, root, to_delete): """ :type root: TreeNode :type to_delete: List[int] :rtype: List[TreeNode] """ to_delete = set(to_delete) self.res = [] self.solve(root,to_delete,True) return self.res def solve(self,node,to_delete,is_root): if not node: return None flag = node.val in to_delete if not flag and is_root: self.res.append(node) node.left = self.solve(node.left,to_delete,flag) node.right = self.solve(node.right,to_delete,flag) return None if flag else node
輸入
[1,2,3,4,5,6,7] [3,5]
輸出
[[1,2,null,4],[6],[7]]
廣告