class Solution:
def isValidSerialization(self, preorder: str) -> bool:
#叶子的节点书总是比非叶子节点数多一
degree = 1
for node in preorder.split(','):
if degree==0:
return False
#如果是#入度是1,出度是0,当前度为-1
if node=='#':
degree-=1
#如果是数字,入度是1,出度是2,因此当前的度为1
else:
degree+=1
#如果出度和入度相等,那就是一棵二叉树
return degree==0
- 题目分析
- 利用度的概念解决这个问题,如果是一个二叉树,那么入度和出度应该是相同的
- 如果是数字的话,入度是1,出度是2
- 如果是#的话,入度是1,出度是0
- 如果最后的度是0,就说明是一个二叉树
- 树的基本知识
- 树的出度=树的入度=树的节点数-1
- 叶子节点个数=度为2的结点个数加1