将字符串构造成树伪代码:
class TreeStructure
expression ->表达式
left:TreeStructure ->左边的树结构
right:TreeStructure ->右边的树结构
state=0 ->访问状态
parent:TreeStructure ->指向于父节点
def __init__(self, str):
this.expression = str;
this.left = null
this.right = null
this.parent:= null
root 为分好的字符串树
递归 def 对字符串根据符号进行分割构造成树(TreeStructure root)
传入root.expression调用查找符号所在位置方法得到当前符号所在位置
IF 返回值为-1
IF 将第一个“(”与最后一个“)”将其消除掉
创建一个树命名为left,并将字符串填入构造方法
并将left赋值给root树的左树
再使用left树调用自身方法
ELSE
return 返回
ELSE IF 返回值大于0
根据下标0到返回值,来截取字符串,得到符号左边的字符串 = leftStr
根据返回值+1到字符串长度,来截取字符串,得到符号右边的字符串 = rightStr
left = new TreeStucture(leftStr)
right = new TreeStucture(rightStr)
将leftStr加入left左树中,将root加入到left.parent作为父节点,并赋值给root的左树
将rightStr加入right右树中,将root加入到right.parent作为父节点,并赋值给root的右树
传入left树调用自身
传入right树调用自身
def 后序遍历打印(传入已经构建好的字符串树)
声明一个栈并将传入的树压入栈中
while 栈不为空
current 获取栈顶的树并赋值作为当前的树
IF 当前树的state等于他子节点个数时
将树出栈并打印表达式
将当前栈内parent父节点中的state+=1
ELSE
IF 左树不为空
将左树压入栈中
IF 右树不为空
将右树压入栈中
def 查找当前字符中的符号所在位置(传入一个字符串)
FOR 对字符串长度进行循环
得到当前下标的单个字符
IF 字符等于"("
计数+1
ELSE IF 字符等于")"
计数-1
ELSE IF (字符=="+" 或者 字符=="-") 与 计数==0
返回当前下标
返回-1