📅  最后修改于: 2023-12-03 15:10:09.139000             🧑  作者: Mango
有时候我们需要在二叉树中按照给定的模式获取最后一个节点,比如按照先序/中序/后序遍历的方式。这篇文章将为你介绍如何实现这一功能。
我们可以采用递归的方式遍历二叉树,并且记录当前遍历的节点,最后返回最后一个经过的节点。以下是伪代码:
last_node = None
def get_last_node(root, pattern):
if root is None:
return
if pattern == "preorder":
global last_node
last_node = root
get_last_node(root.left, pattern)
get_last_node(root.right, pattern)
if pattern == "inorder":
global last_node
last_node = root
get_last_node(root.right, pattern)
if pattern == "postorder":
global last_node
last_node = root
return last_node
以上代码中,我们使用了 last_node
作为全局变量保存最后一个经过的节点。递归函数 get_last_node
接受两个参数: root
表示当前正在遍历的节点, pattern
表示需要遍历的模式。如果当前节点为空,则直接返回。如果遍历方式是先序遍历,将当前节点保存为最后一个节点;如果遍历方式是中序遍历,则在遍历完左子树之后将当前节点保存为最后一个节点;如果遍历方式是后序遍历,则在遍历完左右子树之后将当前节点保存为最后一个节点。最后将 last_node
返回即可。
以下是一个简单的示例,假设我们需要按照后序遍历的方式获取最后一个节点:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def get_last_node(root, pattern):
last_node = None
def dfs(root):
nonlocal last_node
if root is None:
return
if pattern == "preorder":
last_node = root
dfs(root.left)
if pattern == "inorder":
last_node = root
dfs(root.right)
if pattern == "postorder":
last_node = root
dfs(root)
return last_node
# 创建一个二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
# 输出最后一个节点
print(get_last_node(root, "postorder").val)
以上代码会输出 5
,即按照后序遍历方式获取到最后一个节点 node5
。
通过以上代码示例,我们成功实现了按照给定模式获取二叉树最后一个节点的功能。我们可以根据需要替换其中的遍历方式,从而实现不同的功能。这个算法的时间复杂度是 O(N),空间复杂度是 O(1)。