题目
'''
Description:如何在自己的编辑器里调试力扣二叉树
Autor: 365JHWZGo
Date: 2022-01-20 12:49:10
LastEditors: 365JHWZGo
LastEditTime: 2022-01-20 12:52:31
'''
思路
力扣里的树大都是层次遍历,例如力扣102. 二叉树的层序遍历里的举例
其对应的二叉树
修改一
当然在构造时需要对原来的输入进行修改,因为python中不支持null输入,所以需要手动修改为None
修改之后的输入为
l = [3, 9, 20, None, None, 15, 7]
修改二
在力扣里二叉树的题都会有一个树节点的构造类,你在你的编辑器里是需要把它不要注释掉的,要修改里面的val值,这是因为每个题目中val的取值不同,最好就是不要与输入的list里的值重复!取float(“inf”)最好
在102.树的层次遍历中val的取值为
树节点的构造
修改三
下面就是重头戏了!
构造树
class Tree(object):
def __init__(self):
self.root = TreeNode()
# 存放队列
self.queue = []
def createTree(self,l):
# 一直添加节点,直至list为空
while(l):
new_node = TreeNode(l[0])
# 此时树为空
if self.root.val == float("inf"):
self.root = new_node
self.queue.append(self.root)
else:
# 从queue中获取当前根节点
cur_root = self.queue[0]
# 左子树为空
if not cur_root.left:
cur_root.left = new_node
self.queue.append(cur_root.left)
# 右子树为空
else:
cur_root.right = new_node
self.queue.append(cur_root.right)
# 左右子树都不为空,该父节点使命结束,从queue中删除
self.queue.pop(0)
l.pop(0)
return self.root
运行代码【完整演示】
注意要根据题目中的要求对代码进行修改,因为之前在构造二叉树时,None也作为节点被构造出来了!
实际上我们构造的二叉树是
如果题目中不要求显示None则需要手动消除哦!
下面代码中有提示在哪里删除!!!
'''
Description: 102. 二叉树的层序遍历
Autor: 365JHWZGo
Date: 2022-01-19 23:49:10
LastEditors: 365JHWZGo
LastEditTime: 2022-01-20 13:01:12
'''
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, val=float('inf'), left=None, right=None):
self.val = val
self.left = left
self.right = right
class Tree(object):
def __init__(self):
self.root = TreeNode()
self.queue = []
def createTree(self,l):
while(l):
new_node = TreeNode(l[0])
if self.root.val == float("inf"):
self.root = new_node
self.queue.append(self.root)
else:
cur_root = self.queue[0]
if not cur_root.left:
cur_root.left = new_node
self.queue.append(cur_root.left)
else:
cur_root.right = new_node
self.queue.append(cur_root.right)
self.queue.pop(0)
l.pop(0)
return self.root
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
if root == None:
return res
def traversal(root,depth):
# root.val == None 我是删除None的好帮手!!!
if not root or root.val == None:
return
if len(res) == depth:
res.append([])
res[depth].append(root.val)
if root.left:
traversal(root.left,depth+1)
if root.right:
traversal(root.right,depth+1)
traversal(root,0)
return res
if __name__ == '__main__':
p = Solution()
l = [3, 9, 20, None, None, 15, 7]
res = p.levelOrder(Tree().createTree(l))
print(res)
运行结果