中缀表达式转换成二叉树

该博客介绍了如何使用栈数据结构处理已分好符号的列表,以构建二叉树。通过遍历TokenList,将操作数压入NumStack,操作符压入OperStack。遇到右括号时,会匹配并创建节点,直到遇到左括号。对于操作符,栈顶优先级低于当前操作符时,会创建节点并调整栈。最后,OperStack中剩余的操作符也会被处理,构建完整二叉树。整个过程实现了中缀表达式到后缀表达式的转换并构建了对应的解析树。
摘要由CSDN通过智能技术生成

输入:已经划分好的符号(Token)的列表(TokenList)

输出:两个堆栈,一个用于存放操作符(OperStack),元素Token;另一个用于存放操作数(NumStack),元素是TreeNode。

在处理完成后,NumStack中应该只有一个节点,即二叉树的根节点。

实现的伪代码:

CreateTree(TokenList)
  foreach (token in TokenList)
    if (token is 操作数)
      NumStack.Push(token)
    else if (token is 左括号)
      OperStack.Push(token)
    else if (token is 右括号)
      while
        oper = OperStack.Pop
        if (oper is 左括号)
          break
        else
          CreateNode(oper)
        end if
      end while
    else // token is操作符
      while
        if (OperStack为空,or 栈顶是左括号 or 栈顶优先级较低)
          OperStack.Push(token)
          break
        else
          oper = OperStack.Pop
          CreateNode(oper)
        end if
      end while
    end if
  end for
  // 处理OperStack中剩余的操作符
  while OperStack not Empty
    oper = OperStack.Pop
    CreateNode(oper)
  end while

创建节点的伪代码

CreateNode(oper)
  if (oper is 双目)
    right = NumStack.Pop
    left = NumStack.Pop
    NumStack.Push(创建节点:oper, left, right)
  else
    num = NumStack.Pop
    NumStack.Push(创建节点:oper, num)
  end if

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值