当前位置:实例文章 » 其他实例» [文章]leetcode - 105. Construct Binary Tree from Preorder and Inorder Traversal

leetcode - 105. Construct Binary Tree from Preorder and Inorder Traversal

发布人:shili8 发布时间:2025-01-13 08:38 阅读次数:0

**LeetCode105. Construct Binary Tree from Preorder and Inorder Traversal**

在本题中,我们需要根据前序遍历和中序遍历的结果,构造出一个二叉树。这个问题是经典的二叉树构造问题。

### 前序遍历前序遍历是一种从根节点开始,先访问根节点,然后再访问左子树和右子树的方式。例如,对于以下二叉树:

1 / 
23 /  
456


前序遍历的结果是:`[1,2,4,5,3,6]`。

### 中序遍历中序遍历是一种从左子树开始,先访问左子树,然后再访问根节点和右子树的方式。例如,对于以上二叉树:

1 / 
23 /  
456


中序遍历的结果是:`[4,2,5,1,3,6]`。

### 后续遍历后序遍历是一种从左子树开始,先访问左子树和右子树,然后再访问根节点的方式。例如,对于以上二叉树:

1 / 
23 /  
456


后序遍历的结果是:`[4,5,2,6,3,1]`。

### 构造二叉树现在,我们需要根据前序遍历和中序遍历的结果,构造出一个二叉树。我们可以使用以下方法:

* 如果前序遍历的第一个元素是根节点,那么我们就创建一个新的二叉树,并将其作为根节点。
* 然后,我们需要找到中序遍历中与根节点对应的左子树和右子树。我们可以通过在中序遍历中查找根节点来实现这一点。
* 一旦我们找到了左子树和右子树,我们就可以递归地构造出它们。

###代码示例
class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef buildTree(preorder, inorder):
 if not preorder or not inorder:
 return None root_val = preorder[0]
 root = TreeNode(root_val)
 idx = inorder.index(root_val)
 root.left = buildTree(preorder[1:idx+1], inorder[:idx])
 root.right = buildTree(preorder[idx+1:], inorder[idx+1:])
 return rootdef printTree(root):
 if not root:
 return print(root.val, end=" ")
 if root.left:
 printTree(root.left)
 if root.right:
 printTree(root.right)

# 测试preorder = [1,2,4,5,3,6]
inorder = [4,2,5,1,3,6]

root = buildTree(preorder, inorder)
printTree(root) # 输出:124536


### 总结在本题中,我们需要根据前序遍历和中序遍历的结果,构造出一个二叉树。我们可以使用递归方法来实现这一点。首先,我们需要找到根节点,然后再递归地构造出左子树和右子树。最后,我们就可以得到整个二叉树。

### 注释* 在本题中,我们使用了递归方法来构造二叉树。这是因为二叉树的结构是递归的,即每个节点都有一个左子树和一个右子树。
* 我们需要找到根节点,然后再递归地构造出左子树和右子树。我们可以通过在中序遍历中查找根节点来实现这一点。
* 一旦我们找到了左子树和右子树,我们就可以递归地构造出它们。
* 最后,我们就可以得到整个二叉树。

### 相关问题* LeetCode106. Construct Binary Tree from Inorder and Postorder Traversal* LeetCode889. Construct a Binary Search Tree from a Given Preorder Traversal

其他信息

其他资源

Top