Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 102 стр.

UptoLike

А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова .
if((str[i]=='+' || str[i]=='-') && i!=0)
{
// операция '+' или '–' найдена, создаем
// узел дерева для этой операции
next=new Tree;
next->operation=str[i];
// левый операнд – выражение, находящееся
// слева от i-го символа, оно может
// содержать все виды операций (level=0)
// осуществляем рекурсивный вызов для
// построения поддерева этого выражения
next->left=CreateTree(str,0,i);
// правый операнд – выражение,
// находящееся справа от i-го символа,
// оно может содержать только
// операции '*' и '/' (level=1)
// осуществляем рекурсивный вызов для
// построения поддерева этого выражения
next->right=CreateTree(str+i+1,1,
len-i-1);
}
else
// операции '+' и '–' не найдены,
// выражение может содержать только
// операции '*' и '/' (level=1)
// осуществляем рекурсивный вызов для
// построения поддерева выражения
next=CreateTree(str,1, len); break;
// выражение может содержать операции '*', '/'
case 1:
// ищем позицию первой с конца
// операции '*' или '/'
while(i!=0 && str[i]!='*' && str[i]!='/') i--;
if(str[i]=='*' || str[i]=='/')
{
// операция '*' или '/' найдена, создаем
// новый узел дерева для этой операции
next=new Tree;
next->operation=str[i];
// левый операнд – выражение, находящееся
// слева от i-го символа, оно может содержать
// операции '*' и '/' (level=1)
102
А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова                     .
                         if((str[i]=='+' || str[i]=='-') && i!=0)
                         {
                              // операция '+' или '–' найдена, создаем
                              // узел дерева для этой операции
                              next=new Tree;
                              next->operation=str[i];

                                // левый операнд – выражение, находящееся
                                // слева от i-го символа, оно может
                                // содержать все виды операций (level=0)
                                // осуществляем рекурсивный вызов для
                                // построения поддерева этого выражения
                                next->left=CreateTree(str,0,i);

                                // правый операнд – выражение,
                                // находящееся справа от i-го символа,
                                // оно может содержать только
                                // операции '*' и '/' (level=1)
                                // осуществляем рекурсивный вызов для
                                // построения поддерева этого выражения
                                next->right=CreateTree(str+i+1,1,
                                                       len-i-1);
                         }
                         else
                                // операции '+' и '–' не найдены,
                                // выражение может содержать только
                                // операции '*' и '/' (level=1)
                                // осуществляем рекурсивный вызов для
                                // построения поддерева выражения
                                next=CreateTree(str,1, len); break;

            // выражение может содержать операции '*', '/'
            case 1:
                 // ищем позицию первой с конца
                 // операции '*' или '/'
                 while(i!=0 && str[i]!='*' && str[i]!='/') i--;
                 if(str[i]=='*' || str[i]=='/')
                 {
                      // операция '*' или '/' найдена, создаем
                      // новый узел дерева для этой операции
                      next=new Tree;
                      next->operation=str[i];

                         // левый операнд – выражение, находящееся
                         // слева от i-го символа, оно может содержать
                         // операции '*' и '/' (level=1)

                                           102