📜  树递归函数 - Python (1)

📅  最后修改于: 2023-12-03 14:55:38.843000             🧑  作者: Mango

树递归函数 - Python

树递归函数是编写树形数据结构的必备技能之一。它是一种使用递归算法实现树形数据结构的方法,可用于查找、遍历、插入、删除等操作。

基础概念
什么是树

树是一种非线性的数据结构,它由多个节点组成,每个节点都有零个或多个子节点。树的顶部节点称为根节点,只有一个根节点;其他节点称为内部节点或叶子节点,每个内部节点都至少有一个子节点;没有子节点的节点称为叶子节点。

什么是递归

递归是在函数内部调用自己的一种编程技巧。它是一种简洁而优雅的算法,常用于处理树状结构、图像处理、数据搜索等场景。

实现方式

在 Python 中实现树递归函数,最常用的方式是使用类的形式来表示树状结构,例如:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

以上代码定义了一个树节点类,它包含三个属性,分别为:节点的值,左子节点和右子节点。

在这个基础上,我们可以通过递归算法实现如下树的操作:

递归遍历树

遍历树是指按某种次序依次访问树中所有节点。常用的遍历方式有前序遍历、中序遍历和后序遍历。

  • 前序遍历:先访问根节点,然后依次访问左子树和右子树。
def preorderTraversal(root):
    res = []
    def dfs(node):
        if node:
            res.append(node.val)
            dfs(node.left)
            dfs(node.right)
    dfs(root)
    return res
  • 中序遍历:先访问左子树,然后访问根节点,最后访问右子树。
def inorderTraversal(root):
    res = []
    def dfs(node):
        if node:
            dfs(node.left)
            res.append(node.val)
            dfs(node.right)
    dfs(root)
    return res
  • 后序遍历:先访问左子树,然后访问右子树,最后访问根节点。
def postorderTraversal(root):
    res = []
    def dfs(node):
        if node:
            dfs(node.left)
            dfs(node.right)
            res.append(node.val)
    dfs(root)
    return res
递归查找节点

在树中查找指定节点,可以通过递归算法实现。例如,在二叉搜索树中查找指定值的节点:

def searchBST(root, val):
    if not root or root.val == val:
        return root
    if root.val > val:
        return searchBST(root.left, val)
    else:
        return searchBST(root.right, val)
递归插入节点

在树中插入新节点,可以通过递归算法实现。例如,在二叉搜索树中插入新的值:

def insertIntoBST(root, val):
    if not root:
        return TreeNode(val)
    if root.val > val:
        root.left = insertIntoBST(root.left, val)
    else:
        root.right = insertIntoBST(root.right, val)
    return root
递归删除节点

在树中删除指定节点,可以通过递归算法实现。例如,在二叉搜索树中删除指定值的节点:

def deleteNode(root, key):
    if not root:
        return root
    if root.val == key:
        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 = deleteNode(root.right, min_node.val)
    elif root.val > key:
        root.left = deleteNode(root.left, key)
    else:
        root.right = deleteNode(root.right, key)
    return root
递归计算树的高度

计算树的高度,可以通过递归算法实现。例如,计算二叉树的高度:

def maxDepth(root):
    if not root:
        return 0
    left_depth = maxDepth(root.left)
    right_depth = maxDepth(root.right)
    return max(left_depth, right_depth) + 1
总结

树递归函数是一种重要的算法方法,它能够帮助我们处理树形数据结构的各种操作。在 Python 中,使用类的形式表示树节点,再结合递归算法来实现树的遍历、查找、插入、删除和计算高度等操作,可以帮助我们更加高效地处理各种树状结构的问题。