拓展先序遍历二叉树的复原
时间: 2023-06-22 07:20:03 浏览: 92
拓展先序遍历二叉树的复原,是指通过给定的二叉树的拓展先序遍历序列,构建原二叉树的过程。
拓展先序遍历序列包括了二叉树中所有节点的信息,包括节点的值,以及其左右子节点是否存在。具体地,拓展先序遍历序列的一般形式为:(1) 如果当前节点存在,则先输出当前节点的值;(2) 如果当前节点存在左子节点,则递归处理左子树;(3) 如果当前节点存在右子节点,则递归处理右子树。
针对给定的拓展先序遍历序列,我们可以采用递归的方式进行构建。具体地,我们可以按照上述规则,依次构建每个节点的左右子树,最终得到原二叉树。
下面是 Python 代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(preorder: str) -> TreeNode:
if not preorder:
return None
val, i = get_val(preorder, 0)
root = TreeNode(val)
root.left, j = buildTree(preorder[i:]), i
root.right, k = buildTree(preorder[j:])
return root
def get_val(preorder: str, i: int) -> (int, int):
j = i
while preorder[j] != ',':
j += 1
return int(preorder[i:j]), j + 1
```
以上代码中,我们定义了一个 TreeNode 类,用于表示二叉树节点信息。我们还定义了一个 buildTree 函数,用于构建二叉树。该函数以拓展先序遍历序列作为输入,输出构建好的原二叉树。
具体地,我们首先判断输入序列是否为空,如果是则返回空节点。接着,我们从输入序列中获取当前节点的值和其右边第一个逗号的下标,然后构建当前节点,并递归处理其左右子树。最终,我们返回构建好的原二叉树的根节点。
注意,我们还定义了一个 get_val 函数,用于从输入序列中获取当前节点的值和其右边第一个逗号的下标。该函数的输入包括输入序列和当前节点的起始下标,输出包括当前节点的值和其右边第一个逗号的下标。
阅读全文