📅  最后修改于: 2023-12-03 15:12:40.609000             🧑  作者: Mango
本题涉及树的知识,需要编写一段程序实现二叉树的操作:
为了更好地理解本题,我们先来看看树的基本概念。
树是一种非常重要的数据结构,它由 n 个结点组成,有一个被指定为根的结点。这些结点之间通过边连接,且每个结点最多有一个父节点。如果一个结点没有父节点,那么它就是根节点。树中除根节点之外的每个结点有且仅有一个父节点。
二叉树是一种特殊的树,其中每个结点最多只有两个子结点,即左子结点和右子结点。
现在,我们需要实现一个二叉树的操作:
重建二叉树是树的重要操作,我们需要先确定根节点,然后将左子树和右子树分别递归构建。下面是代码实现:
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def buildTree(preorder: List[int], inorder: List[int]) -> TreeNode:
if not preorder or not inorder:
return None
root = TreeNode(preorder[0])
idx = inorder.index(root.val)
root.left = buildTree(preorder[1:idx+1], inorder[:idx])
root.right = buildTree(preorder[idx+1:], inorder[idx+1:])
return root
中序遍历的后继结点有以下几种情况:
下面是代码实现:
def inorderSuccessor(root: TreeNode, p: TreeNode) -> TreeNode:
if not root:
return None
if p.right:
p = p.right
while p.left:
p = p.left
return p
else:
res = None
while root != p:
if root.val > p.val:
res = root
root = root.left
else:
root = root.right
return res
此题是树的基础操作,涉及到树的重要概念和基本操作。通过实现重建二叉树和查找中序遍历的后继结点,可以更加熟悉树的操作。