1. 程式人生 > >【表示式樹】後序表示式構造表示式二叉樹

【表示式樹】後序表示式構造表示式二叉樹

之前在棧的資料結構中有見到將中序表示式轉換成後序表示式的方法,現在來看看如何用後序表示式構造一個表示式二叉樹

static DoubleTree CreatExpressTree(char *express)
{
	unsigned int len = strlen(express);
	DoubleTree statck[len];//C99允許陣列的大小為變數
	int top = 0;
	for(char *p=express; p!=express+len;p++){
		DoubleTree tree = (DoubleTree)malloc(sizeof(struct DoubleTreeNode));
		if(tree==NULL){
			fprintf(stderr,"%s: there is no space", __func__);
			return NULL;
		}
		if(*p=='+'||*p=='-'||*p=='*'||*p=='/'){
			DoubleTree tree_right = statck[--top];
			DoubleTree tree_left = statck[--top];
			statck[top] = tree;
			statck[top]->element = *p;
			statck[top]->LeftNode = tree_left;
			statck[top]->RightNode = tree_right;
			
		}else{
			statck[top] = tree;
			statck[top]->element = *p;
			statck[top]->LeftNode = NULL;
			statck[top]->RightNode = NULL;
		}
		top++;
	}
	return statck[0];
}

使用後續遍歷可以打印出這個資料,這裡使用陣列來實現。

static void LastOverview(DoubleTree tree)
{
	if(tree){
		LastOverview(tree->LeftNode);
		LastOverview(tree->RightNode);
		printf("%c ", tree->element);
	}
	return;
}

main函式中的呼叫

DoubleTree tree = NULL;
char express[] = "ab+cde+**";
tree = CreatExpressTree(express);
LastOverview(tree);