如何在Python中使用生成器完成前序遍历?

问题描述 投票:0回答:1

我想在Python中使用生成器来完成前序遍历,但是我遇到了一些问题并且无法解决。 (其实是leetcode 100,我想用我的方式来解决。)

树节点是这样的:

# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

测试用例是这样的: enter image description here

我尝试写下下面的代码

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))

我除了它可以打印1,2,4,5,3,但结果是 enter image description here

我想知道为什么它不能正确完成前序遍历?

python tree preorder
1个回答
0
投票

这里是正确版本的代码:

    # 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)
© www.soinside.com 2019 - 2024. All rights reserved.