You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python拆分二叉树函数部分测试用例失效,寻求错误排查

拆分二叉树(Splitting Binary Tree)问题排查

问题描述

编写一个函数,输入一棵至少包含一个节点的二叉树,判断是否可以通过移除一条边将其拆分为两棵总和相等的二叉树。如果可以拆分,返回每棵树的新总和;否则返回0。无需返回移除的边。

测试代码

import program
import unittest


class TestProgram(unittest.TestCase):
    def test_case_1(self):
        tree = program.BinaryTree(2)
        tree.left = program.BinaryTree(4)
        tree.left.left = program.BinaryTree(4)
        tree.left.right = program.BinaryTree(6)
        tree.right = program.BinaryTree(10)
        tree.right.left = program.BinaryTree(3)
        tree.right.right = program.BinaryTree(3)
        expected = 16
        actual = program.splitBinaryTree(tree)
        self.assertEqual(actual, expected)

我的实现代码

# This is an input class. Do not edit.
class BinaryTree:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right


def splitBinaryTree(tree, balancesum=0):
    # Write your code here.
    if tree is None:
        return 0
    fullsum = icalculatesum(tree)
    print('fullsum is', fullsum, 'balancesum is', balancesum)
    if fullsum == balancesum:
        return fullsum
    leftsum = icalculatesum(tree.left)
    rightsum = icalculatesum(tree.right)
    if leftsum+tree.value == rightsum+balancesum:
        return fullsum/2
    if rightsum+tree.value == leftsum+balancesum:
        return fullsum/2
    if leftsum+tree.value+balancesum == rightsum:
        return fullsum/2
    if rightsum+tree.value+balancesum == leftsum:
        return fullsum/2
    lefty = splitBinaryTree(tree.left, fullsum-rightsum)
    righty = splitBinaryTree(tree.right, fullsum-leftsum)

    if lefty != 0 or righty !=0:
        return fullsum/2
    return 0


def icalculatesum(node, sumsofar=0):
    if node == None:
        return sumsofar
    sumsofar += node.value
    sumsofar = icalculatesum(node.left, sumsofar)
    sumsofar = icalculatesum(node.right, sumsofar)
    return sumsofar

问题测试用例

该测试用例正确结果应为70,但我的代码返回0:

{
  "nodes": [
    {"id": "1", "left": "9", "right": "20", "value": 1},
    {"id": "9", "left": "5", "right": "2", "value": 9},
    {"id": "20", "left": "30", "right": "10", "value": 20},
    {"id": "30", "left": null, "right": null, "value": 30},
    {"id": "10", "left": "35", "right": "25", "value": 10},
    {"id": "35", "left": null, "right": null, "value": 35},
    {"id": "25", "left": null, "right": null, "value": 25},
    {"id": "5", "left": null, "right": null, "value": 5},
    {"id": "2", "left": "3", "right": null, "value": 2},
    {"id": "3", "left": null, "right": null, "value": 3}
  ],
  "root": "1"
}

已尝试的调整

我之前移除了如下条件:

if fullsum%2 !=0:
return 0 

因为我认为递归过程中最终会遇到奇数总和并返回0,但问题依然存在,请求帮忙排查代码错误。


内容的提问来源于stack exchange,提问作者Karina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:52:45