LeetCode构建树的测试用例

最近几天有些佛了

由于一直赶导师分配的项目

所以LeetCode没怎么刷了

开始接触到树的题目了

一直卡在了如何构建一颗树的测试用例

所以想写篇文章专门分享一下

对了,分享一波最近做的书签


首先分享如何构建一颗二叉树的代码吧,因为这种情况比较特殊,所以更好写。

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


# 创建一二叉树
def creatBTree(data, index):
    pNode = None
    if index < len(data):
        if data[index] == None:
            return
        pNode = TreeNode(data[index])
        pNode.left = creatBTree(data, 2 * index + 1)
        pNode.right = creatBTree(data, 2 * index + 2)
    return pNode

if __name__ == "__main__":
    data = [1, None, 2, 3]
    pNode = creatBTree(data, 0)

再给出如何构建一普通树的代码,至于是怎么构建大家自行理解吧,不难。

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

# 创建树
def build(data):
    if len(data) == 0:
        return TreeNode(0)
    nodeQueue = []
    # 创建一根节点,并将根节点进栈
    root = TreeNode(data[0])
    nodeQueue.append(root)
    # 记录当前行节点的数量
    lineNum = 2
    # 记录当前行中数字在数组中的位置
    startIndex = 1
    # 记录数组中剩余元素的数量
    restLength = len(data) - 1
    while restLength > 0:
        for index in range(startIndex, startIndex + lineNum, 2):
            if index == len(data):
                return root
            cur_node = nodeQueue.pop()
            if data[index] is not None:
                cur_node.left = TreeNode(data[index])
                nodeQueue.append(cur_node.left)
            if index + 1 == len(data):
                return root
            if data[index + 1] is not None:
                cur_node.right = TreeNode(data[index + 1])
                nodeQueue.append(cur_node.right)
        startIndex += lineNum
        restLength -= lineNum
        # 此处用来更新下一层树对应节点的最大值
        lineNum = len(nodeQueue) * 2
    return root

if __name__ == "__main__":
    data = [1, None, 2, 3]
    pNode = build(data)

给出建立树的代码了,再顺带也把遍历树的三种方法给写出来。这三种方法无非也就是先序遍历,中序遍历以及后序遍历,其具体概念这儿就不讲了,百度一下很快就知道了。我直接给代码。

# 先序遍历二叉树
def preTraverse(root):
    if root is None:
        return
    print(root.val)
    preTraverse(root.left)
    preTraverse(root.right)


# 中序遍历二叉树
def midTraverse(root):
    if root is None:
        return
    midTraverse(root.left)
    print(root.val)
    midTraverse(root.right)


# 后序遍历二叉树
def afterTraverse(root):
    if root is None:
        return
    afterTraverse(root.left)
    afterTraverse(root.right)
    print(root.val)

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在Java中使用LeetCode是一种常见的方式来练习和提高算法和数据结构的能力。LeetCode提供了大量的算法题目,每个题目都有一个特定的要求和限制条件。在解题过程中,我们需要按照题目要求设计和实现解决方案。 对于Java的LeetCode编程,一般我们会按照以下步骤进行: 1. 阅读题目:仔细阅读题目的要求和限制条件,理解题目的意思。 2. 分析问题:根据题目的要求和限制条件,考虑可用的算法和数据结构来解决问题。可以使用图、、链表、数组、哈希表等数据结构,以及常见的算法如深度优先搜索、广度优先搜索、动态规划、回溯等。 3. 实现算法:使用Java编写算法的解决方案。根据题目的要求,我们可以使用类、方法等来组织和实现代码。 4. 编写测试用例:为了验证解决方案的正确性,编写测试用例是必不可少的。测试用例应该包括各种情况,包括边界情况和一般情况。 5. 运行和测试:运行编写的代码,并使用编写的测试用例进行测试。通过测试用例的执行结果,我们可以判断代码的正确性和性能。 在编写测试用例时,我们应该考虑尽可能多的情况,以确保代码的正确性。测试用例应该包括输入数据和预期输出结果。可以使用JUnit等测试框架来组织和运行测试用例。 总结来说,Java的LeetCode编程需要认真阅读题目,分析问题,设计具体的解决方案,并使用合适的数据结构和算法进行实现。编写测试用例是验证解决方案正确性的重要步骤,可以使用JUnit等测试框架来辅助进行测试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习的学习者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值