Ai đó có thể giải thích cách xây dựng một cây biểu thức nhị phân.Xây dựng cây biểu thức nhị phân
Ví dụ: Tôi có một chuỗi 2*(1+(2*1));
Cách chuyển đổi thành cây biểu thức nhị phân.
*
| \
| \
2 +
|\
1 *
|\
2 1
Ai đó có thể giải thích cách xây dựng một cây biểu thức nhị phân.Xây dựng cây biểu thức nhị phân
Ví dụ: Tôi có một chuỗi 2*(1+(2*1));
Cách chuyển đổi thành cây biểu thức nhị phân.
*
| \
| \
2 +
|\
1 *
|\
2 1
Chuyển đổi biểu thức sang tiền tố hoặc ký hiệu postfix. Từ đó nó phải khá đơn giản. Các thuật toán được đề cập trong các liên kết wiki sau đây.
bạn sẽ cần phải:
ví dụ, hãy nhìn vào cách tiếp cận này: http://en.wikipedia.org/wiki/Recursive_descent_parser
có những người khác
Đây có lẽ là quá mức cần thiết cho một nhiệm vụ khá đơn giản để hiển thị trực quan cách biểu thức được phân tích cú pháp. –
Chuyển đổi ghi vào để postfix hoặc tiền tố
Các đầu vào postfix là: ab + CDE + **
Java thực hiện
public Tree.TreeNode createExpressionTree(){
Iterator<Character>itr = postOrder.iterator();
Tree tree = new Tree();
NodeStack nodeStack = new NodeStack();
Tree.TreeNode node;
while (itr.hasNext()) {
Character c = itr.next();
if(!isDigit(c)){
node = tree.createNode(c);
node.right = nodeStack.pop();
node.left = nodeStack.pop();
nodeStack.push(node);
}else{
node = tree.creteNode(c);
nodeStack.push(node);
}
}
node = nodeStack.pop();
return node;
}
Thông tin thêm: http://en.wikipedia.org/wiki/Binary_expression_tree
Here symbol = operator –
Nó có thể được chia thành hai bước:
Tính giá trị ưu tiên cho mỗi mã thông báo.
Ví dụ: '+': 1, 'x': 2, số: inf, '(': thêm 10 đến cơ sở, ')': trừ 10 từ cơ sở)
Build Cartesian tree dựa trên mức độ ưu tiên bằng cách sử dụng ngăn xếp (khoảng 5 dòng mã)
Bạn có thể thực hiện nó trong một lần quét.
Bạn có thể triển khai giải pháp bằng thuật toán shunting-yard. Dưới đây là một số chi tiết về wikipiedia:. Bản ngã này được phát minh bởi Edsger Dijkstra, nó là một lựa chọn rất tốt đẹp.Nếu bạn cần một số chi tiết, tôi có thể đăng một ví dụ mã mà tôi đã viết trong C# một số thời gian trước đây nhưng tôi cho rằng liên kết wikipedia là quá đủ. –