이진 표현 트리 만들기

algorithm expression-trees

문제

누군가 이진 표현 트리를 만드는 방법을 설명 할 수 있습니까?

예를 들어, 문자열 2*(1+(2*1)); 이것을 이진 표현 트리로 변환하는 방법.

 *
 | \
 |  \
 2  +
    |\
    1 *
      |\
      2 1

인기 답변

중위 어를 접미사 또는 접두어로 변환

접미사 입력은 다음과 같습니다. ab + cde + **

  1. 심볼이 아닌 경우 첫 번째 문자를 고려한 다음 노드를 만들어 스택에 추가합니다.
  2. 문자가 심볼이면 심볼 pop 요소가있는 노드를 만들고 심볼의 왼쪽과 오른쪽에 추가합니다.
  3. 심볼 노드를 스택으로 밀어 넣습니다.
  4. 반복자가 더 이상 요소를 갖지 않을 때까지 1, 2 및 3을 반복합니다.

Java 구현

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;
}

추가 정보 : http://en.wikipedia.org/wiki/Binary_expression_tree



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow