如何在自己的编辑器里调试力扣二叉树【python】

题目

'''
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)

运行结果
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

365JHWZGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值