【LeetCode】663.均匀树划分

663.均匀树划分

知识点:二叉树;递归

题目描述

给定一棵二叉树,允许剪断一个树枝,这样能生成两棵树,问是否存在一条树枝,使得其被剪断后产生的两棵树的节点和相等。

示例
样例 1: 输入: 5 / \ 10 10 / \ 2 3 输出: True 解释: 5 / 10 和: 15 10 / \ 2 3 和: 15 样例 2: 输入: 1 / \ 2 10 / \ 2 20 输出: False 解释: 无法通过移除一条树边将这棵树划分成结点之和相等的两棵子树。

解法一:二叉树遍历

拆分两棵树,然后让两棵树的节点值之和相等,所以可以直接求整棵树的节点值,然后看是否有哪颗树的节点值之和为整个和的一半。
所以可以遍历二叉树,用一个数组记录每个子树的节点值之和,然后再看数组里是否有其一半就行了

from collections import deque class TreeNode: # 树节点的结构 def __init__(self, data): self.val = data self.leftchild = None self.rightchild = None class Solution: def __init__(self): self.record_list = [] # 记录每个子树的和 #这个方法的意思是if题目中给的并不是树的结构,而是一个数组,也就是树的层序遍历,那要能够根据层序遍历构建树 def create_tree(self, nodelist): # 根据层序遍历构建树 if nodelist[0] == -1: return -1 queue = deque() index = 1 head = TreeNode(nodelist[0]) queue.append(head) while queue: cur_node = nodelist[index] node = queue.popleft() if cur_node == -1: node.leftchild = None else: node.leftchild = TreeNode(cur_node) queue.append(node.leftchild) index += 1 if index == len(nodelist): return head cur_node = nodelist[index] if cur_node == -1: node.rightchild = None else: node.rightchild = TreeNode(cur_node) queue.append(node.rightchild) index += 1 if index == len(nodelist): return head return head def sum(self, head_node): ans = head_node.val if head_node.leftchild != None: ans += sum(head_node.left) if head_node.rightchild != None: ans += sum(head_node.rightchild) self.record_list.append(ans) #记录每个子树的和 return ans def checkequaltree(self, root): allsum = sum(root) if allsum % 2 != 0: return False half_sum = allsum // 2 self.record_list.pop(len(self.record_list)-1) #求的是子树,去除掉root return half_sum in self.record_list

__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/16115926.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(215)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】663.均匀树划分』
点击右上角即可分享
微信分享提示