《如何将字符串递归构建成一棵二叉树并用栈进行后序遍历打印出结果》伪代码

将字符串构造成树伪代码:
    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
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值