由先序序列和中序序列构造一棵二叉树(二叉树种的每个结点值为单个字符)
时间: 2024-01-23 10:13:40 浏览: 79
由先序与中序序列构造二叉树
以下是由先序序列和中序序列构造一棵二叉树的Python代码,其中假设输入的先序序列和中序序列都是字符串类型的,且二叉树中的每个节点值为单个字符。
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def buildTree(preorder, inorder):
if not preorder or not inorder:
return None
root = TreeNode(preorder[0])
idx = inorder.index(preorder[0])
root.left = buildTree(preorder[1:idx+1], inorder[:idx])
root.right = buildTree(preorder[idx+1:], inorder[idx+1:])
return root
# 测试代码
preorder = "ABDECFG"
inorder = "DBEAFCG"
root = buildTree(preorder, inorder)
```
其中,我们定义了一个`TreeNode`类来表示二叉树的节点,包含节点的值`val`以及左右子节点`left`和`right`。`buildTree`函数接收先序序列`preorder`和中序序列`inorder`作为参数,返回构造好的二叉树的根节点。在函数内部,我们首先判断`preorder`和`inorder`是否为空,如果有一个为空,则返回`None`。否则,我们取`preorder`的第一个元素作为根节点的值,然后在`inorder`中找到根节点的位置,将`inorder`分为左子树和右子树两部分。接着,我们递归地构造左子树和右子树,并将它们分别作为根节点的左右子节点。最后,返回根节点即可。
阅读全文