📅  最后修改于: 2023-12-03 15:23:28.955000             🧑  作者: Mango
如果你需要在二叉树中接收奇数节点,有多种方法可以实现。
深度优先搜索是一种递归的算法,可以用于遍历二叉树。在遍历过程中,每当遇到一个奇数节点时,将其加入到结果列表中。
class Solution:
def __init__(self):
self.res = []
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
if root.val % 2 == 1:
self.res.append(root.val)
self.preorderTraversal(root.left)
self.preorderTraversal(root.right)
return self.res
该算法的时间复杂度为 $O(N)$,其中 $N$ 是二叉树节点的数量。
广度优先搜索是一种迭代的算法,可以用于遍历二叉树。在遍历过程中,每当遇到一个奇数节点时,将其加入到结果列表中。
class Solution:
def __init__(self):
self.res = []
def levelOrder(self, root: TreeNode) -> List[int]:
if not root:
return []
queue = [root]
while queue:
node = queue.pop(0)
if node.val % 2 == 1:
self.res.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return self.res
该算法的时间复杂度为 $O(N)$,其中 $N$ 是二叉树节点的数量。
你可以创建一个迭代器,遍历二叉树并返回每个奇数节点。
class Solution:
def __init__(self):
self.stack = []
def __iter__(self):
return self
def __next__(self):
if not self.stack:
raise StopIteration
node = self.stack.pop()
if node.val % 2 == 1:
return node.val
if node.right:
self.stack.append(node.right)
if node.left:
self.stack.append(node.left)
return next(self)
def oddNodes(self, root: TreeNode) -> List[int]:
if not root:
return []
self.stack.append(root)
return list(self)
该算法的时间复杂度为 $O(N)$,其中 $N$ 是二叉树节点的数量。
以上是在二叉树中接收奇数节点的几种方法。根据实际情况选择最适合的算法。