使用 Python 判断两个表达式树是否等价的程序
假设,我们得到了两棵表达式树。我们需要编写一个程序来检查这两棵表达式树,并确定它们是否生成相同的值。这两棵表达式树以中序方式提供给我们,如果它们匹配,则返回 True 值,否则返回 False 值。
因此,如果输入类似于
那么输出将是 True。
这两棵表达式树计算出的值相同。
为了解决这个问题,我们将遵循以下步骤
定义一个函数 dfs()。它将接收节点和字典作为参数。
如果节点为空,则
返回。
如果节点的左子节点和右子节点不为空,则
dic[节点的值] := dic[节点的值] + 1
dfs(节点的左子节点, dic)
dfs(节点的右子节点, dic)
dic1 := 一个包含整数的新映射
dic2 := 一个包含整数的新映射
dfs(root1, dic1)
dfs(root2, dic2)
如果 dic1 与 dic2 相同,则返回 True。
示例
import collections class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree def solve(root1, root2): dic1 = collections.defaultdict(int) dic2 = collections.defaultdict(int) def dfs(node, dic): if not node: return if not node.left and not node.right: dic[node.val] += 1 dfs(node.left, dic) dfs(node.right, dic) dfs(root1, dic1) dfs(root2, dic2) return dic1 == dic2 root1 = make_tree([1, '+', 2, '*', 3, '+', 4 ]) root2 = make_tree([2, '+', 1, '*', 4, '+', 3]) print(solve(root1, root2))
输入
root1 = make_tree([1, '+', 2, '*', 3, '+', 4 ]) root2 = make_tree([2, '+', 1, '*', 4, '+', 3])
输出
True
广告