python数据结构二叉树
时间: 2023-09-02 22:11:47 浏览: 32
二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的特点是具有天然的递归结构,可以用递归的方式实现很多操作。
二叉树的节点定义通常包含三个部分:节点值、左子节点和右子节点。在Python中,可以使用类来定义二叉树节点,如下所示:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
```
其中,val表示节点的值,left和right分别表示左子节点和右子节点。如果一个节点没有左子节点或右子节点,则可以将其设置为None。
二叉树的遍历方式有三种:前序遍历、中序遍历和后序遍历。其中,前序遍历指先访问根节点,然后访问左子树,最后访问右子树;中序遍历指先访问左子树,然后访问根节点,最后访问右子树;后序遍历指先访问左子树,然后访问右子树,最后访问根节点。
在Python中,可以使用递归的方式实现二叉树的遍历。例如,下面是前序遍历的实现:
```python
def preorderTraversal(root):
if root is None:
return []
res = []
res.append(root.val)
res += preorderTraversal(root.left)
res += preorderTraversal(root.right)
return res
```
其中,如果当前节点为空,则返回一个空列表;否则,先将当前节点的值加入结果列表,然后递归遍历左子树和右子树,并将结果合并到结果列表中。中序遍历和后序遍历可以使用类似的方式实现。
除了递归遍历外,还可以使用迭代的方式遍历二叉树。例如,下面是使用栈实现前序遍历的实现:
```python
def preorderTraversal(root):
if root is None:
return []
stack = [root]
res = []
while stack:
node = stack.pop()
res.append(node.val)
if node.right is not None:
stack.append(node.right)
if node.left is not None:
stack.append(node.left)
return res
```
其中,stack表示一个栈,初始时将根节点入栈。每次从栈中弹出一个节点,将其值加入结果列表中,然后将其右子节点和左子节点依次入栈。这样,下一次弹出的节点就是左子节点,可以保证先访问左子树。中序遍历和后序遍历也可以使用类似的方式实现。
除了遍历外,二叉树还有一些其他的操作,例如查找、插入和删除。这些操作可以使用递归或迭代的方式实现,具体实现方式取决于具体的需求。
相关推荐


















