📅  最后修改于: 2023-12-03 14:54:27.591000             🧑  作者: Mango
本文将介绍如何在二叉树中找到所有的素数,并打印出来。在编写代码前,我们先来了解一下什么是素数。
素数是指只能被1和自身整除的正整数,比如2、3、5、7、11等。我们可以用以下方法判断一个数是否为素数:
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
这里用到了一个优化技巧:如果一个数不是素数,那么它的最小因子一定小于等于它的平方根。
接下来我们需要遍历二叉树来寻找素数。我们可以使用深度优先遍历(dfs)或广度优先遍历(bfs)来实现。
def dfs(node):
if node is None:
return
if is_prime(node.val):
print(node.val)
dfs(node.left)
dfs(node.right)
def bfs(node):
queue = [node]
while queue:
cur = queue.pop(0)
if cur is None:
continue
if is_prime(cur.val):
print(cur.val)
queue.append(cur.left)
queue.append(cur.right)
以上两段代码分别实现了dfs和bfs的遍历方式,我们只需要在遍历过程中判断节点的值是否为素数即可。
现在我们可以将以上两部分的代码组合起来实现打印二叉树中所有素数的功能了。
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def dfs(node):
if node is None:
return
if is_prime(node.val):
print(node.val)
dfs(node.left)
dfs(node.right)
def bfs(node):
queue = [node]
while queue:
cur = queue.pop(0)
if cur is None:
continue
if is_prime(cur.val):
print(cur.val)
queue.append(cur.left)
queue.append(cur.right)
if __name__ == '__main__':
root = TreeNode(10)
root.left = TreeNode(5)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(7)
root.right.left = TreeNode(12)
root.right.right = TreeNode(20)
print('dfs:')
dfs(root)
print('bfs:')
bfs(root)
以上代码中,我们定义了一个二叉树节点类TreeNode,并初始化了一棵树。在程序的最后,我们分别使用dfs和bfs遍历这棵树,并打印出所有的素数。
本文介绍了如何实现打印二叉树中所有素数的功能,包括判断一个数是否为素数,以及使用dfs和bfs遍历二叉树。虽然题目看起来比较简单,但实际实现起来还是有些技巧和细节的。希望本文能帮助到大家。