输入:已经划分好的符号(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