python中self做前缀_python实现中序遍历表达式二叉树,前缀、中缀、后缀表达式生成表达式二叉树...
时间: 2023-06-16 09:05:45 浏览: 240
关于 Python 中的 `self` 关键字:
在 Python 中,`self` 是一个约定俗成的关键字,通常作为类方法的第一个参数出现。它表示类的实例对象本身,可以用来访问实例变量和方法。在 Python 中,不像其他语言中使用 `this` 或 `self` 关键字一样强制要求使用,但是为了代码的可读性和规范性,建议在类方法中使用 `self`。
关于 Python 实现中序遍历表达式二叉树,前缀、中缀、后缀表达式生成表达式二叉树:
以下是一个示例代码,实现了中序遍历表达式二叉树,前缀、中缀、后缀表达式生成表达式二叉树的功能:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class ExpressionTree:
def __init__(self):
self.root = None
# 中序遍历表达式二叉树
def inorder_traversal(self, node):
if node.left:
self.inorder_traversal(node.left)
print(node.val, end=' ')
if node.right:
self.inorder_traversal(node.right)
# 前缀表达式生成表达式二叉树
def build_from_prefix(self, expression):
stack = []
for i in range(len(expression) - 1, -1, -1):
if expression[i].isdigit():
node = TreeNode(expression[i])
stack.append(node)
else:
node = TreeNode(expression[i])
node.left = stack.pop()
node.right = stack.pop()
stack.append(node)
self.root = stack.pop()
# 中缀表达式生成表达式二叉树
def build_from_infix(self, expression):
stack = []
i = 0
while i < len(expression):
if expression[i].isdigit():
j = i
while j < len(expression) and expression[j].isdigit():
j += 1
node = TreeNode(expression[i:j])
stack.append(node)
i = j
elif expression[i] == '(':
stack.append('(')
i += 1
elif expression[i] == ')':
while stack[-1] != '(':
right = stack.pop()
op = stack.pop()
left = stack.pop()
node = TreeNode(op)
node.left = left
node.right = right
stack.append(node)
stack.pop() # 弹出左括号
i += 1
else:
while stack and stack[-1] != '(' and self.precedence(stack[-1]) >= self.precedence(expression[i]):
right = stack.pop()
op = stack.pop()
left = stack.pop()
node = TreeNode(op)
node.left = left
node.right = right
stack.append(node)
stack.append(expression[i])
i += 1
while len(stack) > 1:
right = stack.pop()
op = stack.pop()
left = stack.pop()
node = TreeNode(op)
node.left = left
node.right = right
stack.append(node)
self.root = stack.pop()
# 后缀表达式生成表达式二叉树
def build_from_postfix(self, expression):
stack = []
for c in expression:
if c.isdigit():
node = TreeNode(c)
stack.append(node)
else:
right = stack.pop()
left = stack.pop()
node = TreeNode(c)
node.left = left
node.right = right
stack.append(node)
self.root = stack.pop()
# 返回操作符优先级
def precedence(self, op):
if op == '+' or op == '-':
return 1
elif op == '*' or op == '/':
return 2
else:
return 0
```
其中,`TreeNode` 表示二叉树的节点,`ExpressionTree` 表示表达式二叉树。`build_from_prefix`、`build_from_infix`、`build_from_postfix` 分别表示通过前缀、中缀、后缀表达式生成表达式二叉树的方法。`inorder_traversal` 表示中序遍历表达式二叉树的方法。`precedence` 表示返回操作符优先级的方法。
示例代码中使用了栈来辅助实现表达式树的构建,具体的实现方法可以参考代码中的注释。
阅读全文