나는 C++ leaner이고이 표현식에 대해 BST 트리를 만들려고합니다 : 2346 * +/8+, in-fix 버전을 얻으려면 inorder와 postorder, 그리고 postfix 버전의 표현. 표현식에 이진 트리를 만드는 데 어려움이 있습니다.산술 표현을위한 BST를 만드는 방법
Tree:
Stack:
inorder fn{}
postorder fn{}
main{
input the file;
while(expression){
if(digit){
s.push}
else if(operator){
s.top = right;
s.pop;
s.top = left;
s.pop;
T1 = new Tree(operator, left, right);
}
}
내가 만들려는 나무가이 코드이
+
/\
(/) 8
/\
+ 2
/\
* 3
/\
4 6
내 문제처럼 후 ((4 * 6) 트리, 내가 캔트 링크를 만들 수 있다는 것입니다 + : 여기 내 페소 코드 3)과 (4 * 6). 도와주세요. , some1
while(input_file >> expression){
if(isdigit(expression[0])){
sscanf(expression,"%c",&digit);
printf("reading a number: %c \n",digit);
Tree* s.push(digit);
}
else {
sscanf(expression,"%c",&oper);
printf("reading an operator: %c \n",oper);
T1 = new Tree(s.top(), NULL, NULL);
s.pop();
T2 = new Tree(s.top(), NULL, NULL);
s.pop;
myTree = new Tree(oper, T1, T2);
s.push(myTree);
나는 오류 메시지가 계속입니다 수 있습니다 드류 McGowen에
덕분에, 지금 난 다시 스택에 4 * 6 트리를 밀어입니다, 내 코드를 업데이트, 여기에 코드입니다 나를 위해 코드를 확인하십시오. 고마워.
안녕하세요, 주요 부분은 올바른 방향이라고 생각하지만 트리를 수락하려면 스택 함수를 어떻게 수정해야합니까? 여기 내 스택 함수입니다 :
void Stack::Push(char newthing) {
index++;
data[index] = newthing;
}
void Stack::Pop() {
if (index > -1) { index--; }
}
char Stack::Top() {
return data[index];
Eh? 당신은 이미 표현의 후위 버전을 가지고 있습니다. 직접 평가할 수 있습니다. 나무를 만들거나 그 안에 중점을 도출 할 필요가 없습니다. – EJP
'4 * 6' 트리를 만들고 나면 스택에 다시 밀어 넣으십시오. –
네, 그렇지만, 루프를 한 번 더 실행하는 동안 4 * 6 트리 (newTree)를 스택으로 푸시하면 newTree가 새 트리의 오른쪽 하위가됩니다. while 루프를 사용하여 전체 트리를 만드는 방법을 찾아야합니다. 고마워, 너의 생각이 바른 길을 가리키고 있다고 생각해. – YHL