@@ -231,3 +231,121 @@ class Solution(object):
231
231
return dfs(root)
232
232
233
233
```
234
+
235
+
236
+ # leetcode 二叉树调试函数
237
+
238
+ ``` py
239
+ """
240
+ 二叉树树相关问题调试函数
241
+ """
242
+
243
+
244
+ class TreeNode (object ): # leetcode tree 节点定义
245
+ def __init__ (self , val = 0 , left = None , right = None ):
246
+ self .val = val
247
+ self .left = left
248
+ self .right = right
249
+
250
+ def __str__ (self ):
251
+ return " TreeNode:{} left:{} right:{} " .format(self .val, self .left, self .right)
252
+ __repr__ = __str__
253
+
254
+
255
+ def gen_tree_from_lc_input (vals_str ): # [1,2,3] -> root TreeNode
256
+ """ 根据 输入生成一个 tree,返回 root 节点,注意输入字符串
257
+ # [450] 删除二叉搜索树中的节点
258
+ # https://leetcode-cn.com/problems/delete-node-in-a-bst/description/
259
+ # 比如 450 题目单测代码可以这么写
260
+ def test():
261
+ s = Solution()
262
+ root = gen_tree_from_lc_input("[2,1]")
263
+ key = 1
264
+ res = "[2]"
265
+ assert to_lc_tree_str(s.deleteNode(root, key)) == res
266
+ """
267
+ import ast
268
+ valids = vals_str.replace(" null" , " None" )
269
+ vals = ast.literal_eval(valids)
270
+ # 以下就是 gen_tree 函数的内容,为了方便单独使用不调用函数了
271
+ if not vals:
272
+ return None
273
+ nodemap = {}
274
+ for i in range (len (vals)):
275
+ if vals[i] is not None : # 一开始写的 if vals[i],但是 0 节点就错了!!!
276
+ nodemap[i] = TreeNode(vals[i])
277
+ else :
278
+ nodemap[i] = None
279
+
280
+ root = nodemap[0 ]
281
+ for i in range (len (vals)):
282
+ l = 2 * i + 1
283
+ r = 2 * i + 2
284
+ cur = nodemap.get(i, None )
285
+ left = nodemap.get(l, None )
286
+ right = nodemap.get(r, None )
287
+ if cur:
288
+ cur.left = left
289
+ cur.right = right
290
+ return root
291
+
292
+
293
+ def to_lc_tree_str (root ): # root TreeNode -> [1,2,3,null]
294
+ """ 返回层序序列化后的树字符串,可以和 leetcode 输出结果比对字符串"""
295
+ import json
296
+ if not root:
297
+ return ' []'
298
+ curnodes = [root]
299
+ res = [root.val]
300
+ while curnodes:
301
+ nextnodes = []
302
+ for node in curnodes:
303
+ if node:
304
+ if node.left:
305
+ nextnodes.append(node.left)
306
+ res.append(node.left.val)
307
+ else :
308
+ nextnodes.append(None )
309
+ res.append(None )
310
+ if node.right:
311
+ nextnodes.append(node.right)
312
+ res.append(node.right.val)
313
+ else :
314
+ nextnodes.append(None )
315
+ res.append(None )
316
+ curnodes = nextnodes
317
+
318
+ while res[- 1 ] is None : # 最后空节点去掉
319
+ res.pop()
320
+ s = json.dumps(res)
321
+ s = s.replace(" " , " " )
322
+ return s
323
+
324
+
325
+ def gen_tree (vals ):
326
+ """
327
+ 根据层序遍历结果生成二叉树并且返回 root。
328
+ 把题目中输入 null 换成 None
329
+ vals = [1,2,3,None,5]
330
+ """
331
+ if not vals:
332
+ return None
333
+ nodemap = {}
334
+ for i in range (len (vals)):
335
+ if vals[i]:
336
+ nodemap[i] = TreeNode(vals[i])
337
+ else :
338
+ nodemap[i] = None
339
+
340
+ root = nodemap[0 ]
341
+ for i in range (len (vals)):
342
+ l = 2 * i + 1
343
+ r = 2 * i + 2
344
+ cur = nodemap.get(i, None )
345
+ left = nodemap.get(l, None )
346
+ right = nodemap.get(r, None )
347
+ if cur:
348
+ cur.left = left
349
+ cur.right = right
350
+ return root
351
+ ```
0 commit comments