Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- NodeKind = enum opValue, opAdd, opSub, opMul, opCall
- Node = ref object
- case k: NodeKind
- of opValue: value: int
- of opAdd, opSub, opMul, opCall: kids: seq[Node]
- proc safeLen(n: Node): int = if n.k == opValue: 0 else: n.kids.len
- proc sameTree(a, b: Node): bool =
- if a.k == b.k:
- if a.k == opValue: result = a.value == b.value
- elif a.kids.len == b.kids.len:
- result = true
- for i in 0..<a.kids.len:
- if not sameTree(a.kids[i], b.kids[i]): return false
- proc containsSubtree(n, subtree: Node): bool =
- if sameTree(n, subtree): return true
- for i in 0 .. <n.safeLen:
- if n.kids[i].containsSubtree(subtree): return true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement