Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2012, 19:07   #1
галинка94
Пользователь
 
Регистрация: 26.10.2012
Сообщений: 10
Печаль дерево(паскаль)

Свормуваты дерево синтаксического разбора предложения: "Плывут осенние тихие небеса" заменить узел со словом "тихие" на узел "белые", чтобы получить предложение: "Плывут осенние белые небеса". Вывести промежуточный и окончательный результаты.
галинка94 вне форума Ответить с цитированием
Старый 27.10.2012, 19:40   #2
JIeIIIa
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 54
По умолчанию

Пути есть два:
1) давайте свои наработки - помогу что не получается
2) тыц

Решите пойти по второму пути - пишите на stealth(собака)bigmir.net
JIeIIIa вне форума Ответить с цитированием
Старый 27.10.2012, 21:03   #3
галинка94
Пользователь
 
Регистрация: 26.10.2012
Сообщений: 10
По умолчанию

извините, а мне надо на паскале программу сдать преподавателю (а у меня не получается).мне надо программу с нуля)))
галинка94 вне форума Ответить с цитированием
Старый 27.10.2012, 22:49   #4
JIeIIIa
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 54
По умолчанию

Показывайте что именно не получается
Или "надо сделать"="сделайте за меня"?
JIeIIIa вне форума Ответить с цитированием
Старый 29.10.2012, 02:00   #5
галинка94
Пользователь
 
Регистрация: 26.10.2012
Сообщений: 10
По умолчанию

программа на с++
Код:
#include <iostream>
#include <cstdlib>
using namespace std;
class BinarySearchTree
{
    private:
        struct tree_node
        {
           tree_node* left;
           tree_node* right;
           int data;
        };
              public:
        BinarySearchTree()
        {
           root = NULL;
           
        }
        tree_node* root;
        bool isEmpty() const { return root==NULL; }
        void print_preorder();
        void preorder(tree_node*);
        void insert(int);
        void remove(int);
        int isBalanced(tree_node*);
        int height(tree_node*);
        };
void BinarySearchTree::insert(int d)
{
    tree_node* t = new tree_node;
    tree_node* parent;
    t->data = d;
    t->left = NULL;
    t->right = NULL;
    parent = NULL;
      if(isEmpty()) root = t;
    else
    {
            tree_node* curr;
        curr = root;
 
        while(curr)
        {
            parent = curr;
            if(t->data > curr->data) curr = curr->right;
            else curr = curr->left;
        }

        if(t->data < parent->data)
           parent->left = t;
        else
           parent->right = t;
    }
}
void BinarySearchTree::remove(int d)
{
    bool found = false;
    if(isEmpty())
    {
        cout<<" This Tree is empty! "<<endl;
        return;
    }
        tree_node* curr;
    tree_node* parent;
    curr = root;
    
    while(curr != NULL)
    {
         if(curr->data == d)
         {
            found = true;
            break;
         }
         else
         {
             parent = curr;
             if(d>curr->data) curr = curr->right;
             else curr = curr->left;
         }
    }
    if(!found)
		 {
        cout<<" Data not found! "<<endl;
        return;
    }
	     if((curr->left == NULL && curr->right != NULL)|| (curr->left != NULL
&& curr->right == NULL))
    {
       if(curr->left == NULL && curr->right != NULL)
       {
           if(parent->left == curr)
           {
             parent->left = curr->right;
             delete curr;
           }
           else
           {
             parent->right = curr->right;
             delete curr;
           }
       }
       else 
       {
          if(parent->left == curr)
           {
             parent->left = curr->left;
             delete curr;
           }
           else
           {
             parent->right = curr->left;
             delete curr;
           }
       }
     return;
    }
		if( curr->left == NULL && curr->right == NULL)
    {
        if(parent->left == curr) parent->left = NULL;
        else parent->right = NULL;
		 		 delete curr;
		 		 return;
    }


   
    if (curr->left != NULL && curr->right != NULL)
    {
        tree_node* chkr;
        chkr = curr->right;
        if((chkr->left == NULL) && (chkr->right == NULL))
        {
            curr = chkr;
            delete chkr;
            curr->right = NULL;
        }

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.10.2012 в 09:06.
галинка94 вне форума Ответить с цитированием
Старый 29.10.2012, 02:01   #6
галинка94
Пользователь
 
Регистрация: 26.10.2012
Сообщений: 10
По умолчанию

Код:
else         {
           if((curr->right)->left != NULL)
            {
                tree_node* lcurr;
                tree_node* lcurrp;
                lcurrp = curr->right;
                lcurr = (curr->right)->left;
                while(lcurr->left != NULL)
                {
                   lcurrp = lcurr;
                   lcurr = lcurr->left;
                }
		curr->data = lcurr->data;
                delete lcurr;
                lcurrp->left = NULL;
           }
           else
           {
               tree_node* tmp;
               tmp = curr->right;
               curr->data = tmp->data;
	       curr->right = tmp->right;
               delete tmp;
           }
        }
		 return;
    }
}

void BinarySearchTree::print_preorder()
{
    preorder(root);
}
void BinarySearchTree::preorder(tree_node* p)
{
    if(p != NULL)
    {
        cout<<" "<<p->data<<" ";
        if(p->left) preorder(p->left);
        if(p->right) preorder(p->right);
    }
    else return;
}
int BinarySearchTree::isBalanced(tree_node* root)
{
   int lh; 
   int rh; 
 
   if(root == NULL)
    return 1; 
 
   lh = height(root->left);
   rh = height(root->right);
   if( abs(lh-rh) <= 1 &&
       isBalanced(root->left) &&
       isBalanced(root->right))
     return 1;
  
   return 0;
}
int BinarySearchTree::height(tree_node* node)
{
   if (node==NULL)
       return 0;
   else
   {int lDepth = height(node->left);
       int rDepth = height(node->right);
       if (lDepth > rDepth)
           return(lDepth+1);
       else return(rDepth+1);
   }
} 
int main()
{
    BinarySearchTree b;
    int ch,tmp,tmp1,i=0;
    bool L;
    while(1)
    {
       cout<<endl<<endl;
       cout<<" Binary Search Tree Operations "<<endl;
       cout<<" ----------------------------- "<<endl;
       cout<<" 1. Insertion/Creation "<<endl;
       cout<<" 2. Pre-Order Traversal "<<endl;
       cout<<" 3. Removal "<<endl;
       cout<<" 4. Check for balancing"<<endl;
       cout<<" 5. Exit "<<endl;
       cout<<" Enter your choice : ";
       cin>>ch;
       switch(ch)
       {
           case 1 : cout<<" Enter Number to be inserted : ";
                    cin>>tmp;
                    b.insert(tmp);
                    break;
           case 2 : cout<<endl;
                    cout<<" Pre-Order Traversal "<<endl;
                    cout<<" -------------------"<<endl;
                    b.print_preorder();
                    break;
           case 3 : cout<<" Enter data to be deleted : ";
                    cin>>tmp1;
                    b.remove(tmp1);
                    break;
           case 4 : cout<<endl;
                    L=b.isBalanced(b.root);
                    if(L) cout<<" The tree is balanced "<<endl;
                    else cout<<" The tree is not balanced"<<endl;
                    cout<<" -------------------- "<<endl;
                    break;
           case 5 : 
                    return 0;              
       }
    }
}

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.10.2012 в 09:05.
галинка94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево(Паскаль) solnushko94 Помощь студентам 0 31.05.2012 10:16
Дерево (паскаль) Andrey( Помощь студентам 0 02.05.2012 18:31
бинарное дерево(паскаль) tim47 Помощь студентам 0 15.04.2012 17:43
[Паскаль] Преобразование формулы в дерево Karabas Помощь студентам 5 18.04.2009 22:31