二叉树的建立与基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二叉树的建立与基本操作
二叉树是一种特殊的树形结构,它由节点(node)组成,每个节点最多有两个子节点。

二叉树的基本操作包括建立二叉树、遍历二叉树、查找二叉树节点、插入和删除节点等。

本文将详细介绍二叉树的建立和基本操作,并给出相应的代码示例。

一、建立二叉树
建立二叉树有多种方法,包括使用数组、链表和前序、中序、后序遍历等。

下面以使用链表的方式来建立二叉树为例。

1.定义二叉树节点类
首先,定义一个二叉树节点的类,包含节点值、左子节点和右子节点三个属性。

```python
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
```
2.建立二叉树
使用递归的方法来建立二叉树,先构造根节点,然后递归地构造左子树和右子树。

```python
def build_binary_tree(lst):
if not lst: # 如果 lst 为空,则返回 None
return None
mid = len(lst) // 2 # 取 lst 的中间元素作为根节点的值
root = Node(lst[mid])
root.left = build_binary_tree(lst[:mid]) # 递归构造左子树root.right = build_binary_tree(lst[mid+1:]) # 递归构造右子树
return root
```
下面是建立二叉树的示例代码:
```python
lst = [1, 2, 3, 4, 5, 6, 7]
root = build_binary_tree(lst)
```
二、遍历二叉树
遍历二叉树是指按照其中一规则访问二叉树的所有节点,常见的遍历
方式有前序遍历、中序遍历和后序遍历。

1.前序遍历
前序遍历是指先访问根节点,然后访问左子节点,最后访问右子节点。

```python
def pre_order_traversal(root):
if root:
print(root.value) # 先访问根节点
pre_order_traversal(root.left) # 递归访问左子树
pre_order_traversal(root.right) # 递归访问右子树
```
2.中序遍历
中序遍历是指先访问左子节点,然后访问根节点,最后访问右子节点。

```python
def in_order_traversal(root):
if root:
in_order_traversal(root.left) # 递归访问左子树
print(root.value) # 访问根节点
in_order_traversal(root.right) # 递归访问右子树
```
3.后序遍历
后序遍历是指先访问左子节点,然后访问右子节点,最后访问根节点。

```python
def post_order_traversal(root):
if root:
post_order_traversal(root.left) # 递归访问左子树
post_order_traversal(root.right) # 递归访问右子树
print(root.value) # 访问根节点
```
下面是遍历二叉树的示例代码:
```python
pre_order_traversal(root)
in_order_traversal(root)
post_order_traversal(root)
```
三、查找二叉树节点
查找二叉树节点可以通过遍历的方式实现,也可以通过递归的方式实现。

1.遍历查找
遍历查找是指按照其中一种遍历方式遍历二叉树的所有节点,找到目标节点。

```python
def find_node(root, value):
if not root:
return None
if root.value == value:
return root
left_node = find_node(root.left, value) # 在左子树中查找目标节点
if left_node:
return left_node
right_node = find_node(root.right, value) # 在右子树中查找目标节点
if right_node:
return right_node
```
2.递归查找
递归查找是指通过递归的方式查找目标节点。

```python
def find_node(root, value):
if not root or root.value == value:
return root
if value < root.value:
return find_node(root.left, value) # 在左子树中查找目标节点else:
return find_node(root.right, value) # 在右子树中查找目标节点
```
下面是查找二叉树节点的示例代码:
```python
node = find_node(root, 3)
if node:
print(node.value)
else:
print("Node not found.")
```
四、插入和删除节点
插入和删除节点是在二叉树中进行节点操作的重要操作。

1.插入节点
插入节点的操作是将一个新的节点插入到二叉树中的适当位置,确保二叉树的性质不变。

```python
def insert_node(root, value):
if not root: # 如果根节点为空,则直接将新节点作为根节点
return Node(value)
if value < root.value:
root.left = insert_node(root.left, value) # 插入到左子树中else:
root.right = insert_node(root.right, value) # 插入到右子树中
return root
```
2.删除节点
删除节点的操作是删除二叉树中的一个指定节点,并保持二叉树的性质。

```python
def delete_node(root, value):
if not root: # 如果根节点为空,则返回 None
return None
if value < root.value:
root.left = delete_node(root.left, value) # 递归删除左子树中的节点
elif value > root.value:
root.right = delete_node(root.right, value) # 递归删除右子树中的节点
else:
if not root.left: # 如果左子树为空,则返回右子树
return root.right
elif not root.right: # 如果右子树为空,则返回左子树
return root.left
else:
temp = root.right # 找到右子树中的最小节点
while temp.left:
temp = temp.left
root.value = temp.value # 将最小节点的值赋给根节点
root.right = delete_node(root.right, temp.value) # 删除最小节点
return root
```
下面是插入和删除节点的示例代码:
```python
root = insert_node(root, 8)
root = delete_node(root, 6)
```
以上就是建立二叉树与基本操作的相关内容,包括建立二叉树、遍历
二叉树、查找二叉树节点、插入和删除节点。

通过使用递归和遍历的方法,我们可以对二叉树进行各种操作。

掌握了二叉树的建立与基本操作,对于
解决一些与树结构相关的问题非常有帮助。

相关文档
最新文档