ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Написать процедуру которая по линейно скобочной записи строит бинарное дерево поискаstruct list{//ст-ра элемента дерева char el; list *nextl,*nextr; }; struct ss{//stack struct list* inf; ss* prew; };//структура стека list* pop(ss** tos)//извлечь из стека { if(*tos!=NULL){ list * tmp =(*tos)->inf; (*tos)=(*tos)->prew; return(tmp); } } void push(list *ll,ss** tos) //поместить в стек { ss *nn = new ss; nn->inf = ll; nn->prew = *tos; *tos = nn; } list * buildtree(char * lsz)//функция построения дерева { list * fff = NULL;//инициализируем корень list * tek = NULL; //инициализируем пер-ю тек-го ел-та ss * tos = NULL;//инициализируем вершину стека int l = strlen(lsz);//определяем длину строки bool fl = false;//сбрасываем флаг запятой for(int i = 0;i<l;i++) { char s = lsz[i]; if(i == 0){
fff = new list; fff->el = s; fff->nextl=NULL; fff->nextr=NULL; tek = fff; bool fl = false; }else{ if(s == '('){ //сбрасываем флаг запятой fl = false; }else if(s == ')'){ tek = pop(&tos);//дост элемент из стека fl = false; //сбрасываем флаг запятой }else if(s == ','){ fl = true;//устанавливаем флаг запятой }else{ push(tek,&tos);//помещаем переменную в стек list *tmp = new list;//созд новый Эл-т дерева tmp ->el = s; tmp->nextl=NULL; tmp->nextr=NULL; if(!fl)tek->nextl = tmp; else//настраиваем ссылки с пред-го елемента tek->nextr = tmp; tek = tmp;//текущий элемент приравниваем к толькосозданному } } } return fff; }
Не нашли, что искали? Воспользуйтесь поиском:
|