从前序与中序遍历序列构造二叉树(Python实现)
2022/2/7 12:42:46
本文主要是介绍从前序与中序遍历序列构造二叉树(Python实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
从前序与中序遍历序列构造二叉树(Python实现)
一、了解三种树的遍历(前、中、后)
- 前序:根、左、右
- 中序:左、根、右
- 后序:左、右、根
前序遍历顾名思义就是根在最前面遍历,中序就是根在中间,后续就是根在后面。
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: list1 = [] def preorder(root): """ preorder就是前序遍历的算法实现(可以把这个算法当作规律) 1.如果节点不为空,继续前序遍历 2.输出当前节点(当作根) 3.如果当前节点的左字树不为空,则继续前序遍历 4.如果当前节点的右子树不为空,则继续前序遍历 这里要注意左子树的递归,他没递归完,是不会执行右子树的递归的 """ if root is None: return list1.append(root.val) preorder(root.left) preorder(root.right) preorder(root) return list1
接下来做个题来检验一下吧
二、了解前序和中序遍历的序列规律(参照Leetcode第105题解)
结合上图
递归思路
-
前序遍历的形式总是:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]
即根节点总是前序遍历中的第一个节点。
-
中序遍历的形式总是:[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]
只要我们在中序遍历中定位到根节点,那么我们就可以分别知道左子树和右子树中的节点数目。由于同一颗子树的前序遍历和中序遍历的长度显然是相同的,因此我们就可以对应到前序遍历的结果中,对上述形式中的所有左右括号进行定位。
这样以来,我们就知道了左子树的前序遍历和中序遍历结果,以及右子树的前序遍历和中序遍历结果,我们就可以递归地对构造出左子树和右子树,再将这两颗子树接到根节点的左右位置。
三、代码实现
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode: if len(preorder) > 0: root = TreeNode(preorder[0]) index = inorder.index(preorder[0]) root.left = self.buildTree(preorder[1:index+1], inorder[:index]) root.right = self.buildTree(preorder[index+1:], inorder[index+1:]) return root
参考文章
这篇关于从前序与中序遍历序列构造二叉树(Python实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门