二叉树的基本运算代码
时间: 2023-07-09 21:14:21 浏览: 93
以下是二叉树的基本运算的示例代码(使用 Python 语言实现):
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, value):
self.val = value
self.left = None
self.right = None
# 创建二叉树
def create_tree():
x = input("请输入节点值(空值表示该节点不存在):")
if not x:
return None
root = TreeNode(x)
root.left = create_tree()
root.right = create_tree()
return root
# 前序遍历二叉树
def preorder_traversal(root):
if not root:
return
print(root.val)
preorder_traversal(root.left)
preorder_traversal(root.right)
# 中序遍历二叉树
def inorder_traversal(root):
if not root:
return
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
# 后序遍历二叉树
def postorder_traversal(root):
if not root:
return
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val)
# 插入节点
def insert_node(root, value):
if not root:
return TreeNode(value)
if value < root.val:
root.left = insert_node(root.left, value)
elif value > root.val:
root.right = insert_node(root.right, value)
return root
# 删除节点
def delete_node(root, value):
if not root:
return None
if value < root.val:
root.left = delete_node(root.left, value)
elif value > root.val:
root.right = delete_node(root.right, value)
else:
if not root.left:
return root.right
if not root.right:
return root.left
min_node = root.right
while min_node.left:
min_node = min_node.left
root.val = min_node.val
root.right = delete_node(root.right, min_node.val)
return root
# 查找节点
def find_node(root, value):
if not root:
return None
if value == root.val:
return root
elif value < root.val:
return find_node(root.left, value)
else:
return find_node(root.right, value)
# 修改节点
def modify_node(root, old_value, new_value):
node = find_node(root, old_value)
if node:
node.val = new_value
# 计算二叉树深度
def get_depth(root):
if not root:
return 0
left_depth = get_depth(root.left)
right_depth = get_depth(root.right)
return max(left_depth, right_depth) + 1
# 判断二叉树是否为空
def is_empty(root):
return not root
# 测试代码
if __name__ == "__main__":
root = create_tree()
print("前序遍历:")
preorder_traversal(root)
print("中序遍历:")
inorder_traversal(root)
print("后序遍历:")
postorder_traversal(root)
root = insert_node(root, 5)
print("插入节点后的中序遍历:")
inorder_traversal(root)
root = delete_node(root, 4)
print("删除节点后的中序遍历:")
inorder_traversal(root)
node = find_node(root, 3)
if node:
print("查找到节点:", node.val)
else:
print("未找到节点")
modify_node(root, 3, 6)
print("修改节点后的中序遍历:")
inorder_traversal(root)
print("二叉树的深度为:", get_depth(root))
print("二叉树是否为空:", is_empty(root))
```
注意,以上代码只是示例代码,实际应用中可能需要根据具体需求进行修改。
阅读全文