我想在Python中使用生成器来完成前序遍历,但是我遇到了一些问题并且无法解决。 (其实是leetcode 100,我想用我的方式来解决。)
树节点是这样的:
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
我尝试写下下面的代码
class Solution:
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
def preorder(n):
yield n.val
if n.left:
preorder(n.left)
else:
yield 'None'
if n.right:
preorder(n.right)
else:
yield 'None'
i = iter(preorder(p))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
我想知道为什么它不能正确完成前序遍历?
这里是正确版本的代码:
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution(object):
def isSameTree(self, p, q):
def preorder(node1, node2):
# Base case: If both nodes are None, they are equal
if not node1 and not node2:
return True
# If one of the nodes is None and the other is not, they are not equal
if not node1 or not node2:
return False
# Check if the values are equal, and recursively check left and right subtrees
return (node1.val == node2.val) and \
preorder(node1.left, node2.left) and \
preorder(node1.right, node2.right)
# Start the preorder traversal from the roots of both trees
return preorder(p, q)