Leetcode 1361:验证二叉树(超详细的解法!!!)
发布日期:2021-06-29 15:58:38
浏览次数:2
分类:技术文章
本文共 1866 字,大约阅读时间需要 6 分钟。
二叉树上有 n
个节点,按从 0
到 n - 1
编号,其中节点 i
的两个子节点分别是 leftChild[i]
和 rightChild[i]
。
只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true
;否则返回 false
。
如果节点 i
没有左子节点,那么 leftChild[i]
就等于 -1
。右子节点也符合该规则。
注意:节点没有值,本问题中仅仅使用节点编号。
示例 1:
输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,-1,-1,-1]输出:true
示例 2:
输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,3,-1,-1]输出:false
示例 3:
输入:n = 2, leftChild = [1,0], rightChild = [-1,-1]输出:false
示例 4:
输入:n = 6, leftChild = [1,-1,-1,4,-1,-1], rightChild = [2,-1,-1,5,-1,-1]输出:false
提示:
1 <= n <= 10^4
leftChild.length == rightChild.length == n
-1 <= leftChild[i], rightChild[i] <= n - 1
解题思路
首先明确二叉树的定义:二叉树是一个连通的无环图,并且每一个顶点的度(包括入度和出度)不大于3,根结点的度不大于2。
所以先要确定树根,可以通过入度为0来确认。如果树根不存在自然就返回False
了,如果存在多个树根同样返回False
。
d = [0] * nfor i in leftChild + rightChild: if i != -1: d[i] += 1 root = -1for i in range(n): if d[i] == 0: if root != -1: reutrn False root = iif root == -1: return False
然后就是判断连通性,可以通过bfs
来判断是不是每个节点有且仅被访问一次。
class Solution: def validateBinaryTreeNodes(self, n: int, leftChild: List[int], rightChild: List[int]) -> bool: d = [0] * n for i in leftChild + rightChild: if i != -1: d[i] += 1 root = -1 for i in range(n): if d[i] == 0: if root != -1: return False root = i if root == -1: return False vis, q = set([root]), [root] while q: pre = q.pop(0) if leftChild[pre] != -1: if leftChild[pre] in vis: return False vis.add(leftChild[pre]) q.append(leftChild[pre]) if rightChild[pre] != -1: if rightChild[pre] in vis: return False vis.add(rightChild[pre]) q.append(rightChild[pre]) return len(vis) == n
reference:
我将该问题的其他语言版本添加到了我的
如有问题,希望大家指出!!!
转载地址:https://coordinate.blog.csdn.net/article/details/104484482 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月28日 11时14分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Cause: couldn‘t make a guess for 解决方法
2019-04-29
小米手机相册选取后的intent为空?
2019-04-29
Android SurfaceView预览相机黑屏问题解决方案
2019-04-29
Android HTTP 设置UA(User-Agent)及自定义
2019-04-29
如何快速融入团队并成为团队核心?(九)
2019-04-29
年薪百万是一种什么样的体验
2019-04-29
为什么有些公司不愿意微服务化,因为“太南了”
2019-04-29
如何有效的准备Java面试?
2019-04-29
线程池运用不当的一次线上事故
2019-04-29
女朋友生气是随机事件???
2019-04-29
漫画:腾讯面试题(盛最多水的容器)
2019-04-29
标量子查询产生的SQL性能瓶颈,该怎么合理优化?
2019-04-29
抱歉,我觉得有些人做副业并不靠谱
2019-04-29
如何看待程序媛们的职场焦虑和未来职业规划?
2019-04-29
换种监控姿势:基于深度学习+流处理的时序告警系统
2019-04-29
20+头部互联网公司面试总结及答案(Java方向)
2019-04-29
远程面试成功入职,我整理了一份面试指南!
2019-04-29
Redis亿级数据过滤和布隆过滤器
2019-04-29