누군가 이진 표현 트리를 작성하는 방법을 설명 할 수 있습니까?이진 표현 트리 만들기
예를 들어, 문자열이 2*(1+(2*1));
이진 표현 트리로 변환하는 방법이 있습니다.
*
| \
| \
2 +
|\
1 *
|\
2 1
누군가 이진 표현 트리를 작성하는 방법을 설명 할 수 있습니까?이진 표현 트리 만들기
예를 들어, 문자열이 2*(1+(2*1));
이진 표현 트리로 변환하는 방법이 있습니다.
*
| \
| \
2 +
|\
1 *
|\
2 1
접두사 또는 접미사 표기법으로 표현식을 변환하십시오. 거기에서 꽤 간단해야합니다. 알고리즘은 다음 wiki 링크에서 언급됩니다.
에 당신이 필요합니다 :
예를 들어,이 방법에 대해 살펴 : http://en.wikipedia.org/wiki/Recursive_descent_parser
다른 접미사 나 접두사
표현식이 구문 분석되는 방식을 시각적으로 보여주는 다소 단순한 과제는 과장 될 수 있습니다. –
변환 중위가
후위 입력은 다음과 같습니다 AB +의 CDE + **
자바 구현이 없습니다
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;
}
그것은 두 단계로 나눌 수 있습니다
여기 기호 = 연산자 –
:
각 토큰의 우선 순위 값을 계산하십시오. 예를 들어
'+'1 'X'2 번호 : INF, '(',베이스 (10)를 추가 ')')베이스 10 빼기
빌드 Cartesian tree에 기초 스택을 사용하여 우선 순위 (약 5 줄의 코드)
한 번의 스캔으로 처리 할 수 있습니다.
shunting-yard 알고리즘을 사용하여 솔루션을 구현할 수 있습니다. 다음은 위키피디아에 대한 세부 정보입니다 :. 이 골목은 Edsger Dijkstra에 의해 발명되었습니다. 아주 좋은 대안입니다.몇 가지 세부 사항이 필요하다면 C#에서 작성한 코드 예제를 게시 할 수 있지만 위키피디아 링크가 충분하다고 가정합니다. –