📅  最后修改于: 2023-12-03 15:39:41.043000             🧑  作者: Mango
本文讨论如何在二叉树中打印给定节点的子树中存在的所有节点。首先我们需要明确什么是二叉树以及节点的概念。
二叉树是由节点和边组成的数据结构,每个节点至多有两个子节点,分别称作左子节点和右子节点。每个节点都具有一个值,也可以是空值(NULL)。根节点是二叉树中最上面的节点,根节点的左右子树也是二叉树。
如果要打印整个二叉树中某个节点的子树中的所有节点,我们需要遍历这个节点的子树。有以下几种遍历方式:
下面我们以前序遍历为例,编写程序打印给定节点的子树中所有节点,并返回结果。
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def preorder(root: Node, result: List[int], target: int) -> List[int]:
"""
打印给定节点的子树中所有节点
"""
if not root:
return
if root.val == target:
result.append(root.val)
preorder(root.left, result, target)
preorder(root.right, result, target)
if root.val != target and (root.left and root.left.val == target or root.right and root.right.val == target):
result.append(root.val)
return result
# 示例
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
print(preorder(root, [], 3)) # [3, 6, 7]
上述程序中,我们使用了前序遍历的方式打印给定节点的子树中所有节点。如果当前节点的值等于给定值,将其加入结果数组;否则如果其左子节点或右子节点的值等于给定值,将当前节点加入结果数组。最终返回结果数组。
本文介绍了如何打印二叉树中给定节点的子树中存在的所有节点,并给出了一种使用前序遍历的方法。读者可以根据需要进行修改和扩展。