📅  最后修改于: 2023-12-03 14:56:23.713000             🧑  作者: Mango
在计算机科学中,二叉树是一种重要的数据结构。二叉树由节点组成,每个节点最多只有两个子节点。一个节点有左子节点和右子节点,我们常常可以使用括号表示法来表示一个二叉树。
在这里,我们会介绍如何使用括号表示法来构造一个二叉树。具体来说,我们可以根据一组括号字符串来构造一个二叉树。
括号表示法是一种用于表示二叉树的字符串表示法。具体来说,一个二叉树可以用一组括号字符串来表示:
例如,下图所示的二叉树可以表示为字符串 (3(1()(2))(4)):
3
/ \
1 4
\
2
有了括号表示法,我们可以根据一组括号字符串构造一个二叉树。
具体来说,我们可以定义递归函数来构造二叉树。对于一棵以字符串 str 表示的二叉树,我们可以按照以下步骤构造它:
下面是一个 Python 代码片段,用于根据括号表示法构造二叉树:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(s: str) -> TreeNode:
if not s:
return None
# 取出根节点的值
val, i = 0, 0
if s[0] == '-':
i = 1
while i < len(s) and s[i].isdigit():
val = val * 10 + ord(s[i]) - ord('0')
i += 1
if i < len(s) and s[i] == '-':
val = -val
i += 1
# 查找左右子树的边界
count, j = 0, i
while j < len(s):
if s[j] == '(':
count += 1
elif s[j] == ')':
count -= 1
if count == 0:
break
j += 1
# 递归构造左右子树
left = buildTree(s[i+1:j])
right = buildTree(s[j+2:len(s)-1])
# 返回二叉树
return TreeNode(val, left, right)
这个代码片段实现了一个函数 buildTree(s: str) -> TreeNode
,其中 s 表示括号表示法字符串,返回二叉树的根节点。
这篇文章介绍了如何使用括号表示法构造二叉树。我们可以通过定义递归函数来实现这个过程,具体步骤如下:
实际上,括号表示法在算法竞赛和面试中是一个常见的问题,学好括号表示法可以提高算法竞赛和面试的水平。