📅  最后修改于: 2023-12-03 14:55:38.843000             🧑  作者: Mango
树递归函数是编写树形数据结构的必备技能之一。它是一种使用递归算法实现树形数据结构的方法,可用于查找、遍历、插入、删除等操作。
树是一种非线性的数据结构,它由多个节点组成,每个节点都有零个或多个子节点。树的顶部节点称为根节点,只有一个根节点;其他节点称为内部节点或叶子节点,每个内部节点都至少有一个子节点;没有子节点的节点称为叶子节点。
递归是在函数内部调用自己的一种编程技巧。它是一种简洁而优雅的算法,常用于处理树状结构、图像处理、数据搜索等场景。
在 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 中,使用类的形式表示树节点,再结合递归算法来实现树的遍历、查找、插入、删除和计算高度等操作,可以帮助我们更加高效地处理各种树状结构的问题。