| 93 | |
| 94 | print("Example 4") |
| 95 | class BinaryTreeWithParent(BinaryTree): |
| 96 | def __init__( |
| 97 | self, |
| 98 | value, |
| 99 | left=None, |
| 100 | right=None, |
| 101 | parent=None, |
| 102 | ): |
| 103 | super().__init__(value, left=left, right=right) |
| 104 | self.parent = parent |
| 105 | |
| 106 | def _traverse(self, key, value): |
| 107 | if ( |
| 108 | isinstance(value, BinaryTreeWithParent) |
| 109 | and key == "parent" |
| 110 | ): |
| 111 | return value.value # Prevent cycles |
| 112 | else: |
| 113 | return super()._traverse(key, value) |
| 114 | |
| 115 | |
| 116 | print("Example 5") |