2015-08-21 2 views
-4

Как работает рекурсивная функция? В каждом случае происходит обратное перемещение, вызываемое с помощью temp-> left и temp-> right, или все вызовы temp-> left сопровождаются всеми вызовами temp-> right? Пожалуйста, дайте подробное объяснение для следующего кода.Обход обхода двоичного дерева поиска

void traverse(bst *temp) 
    { 
     if(temp) 
     { 
      traverse(bst->left); 
      printf("%d",temp->info); 
      traverse(bst->right); 
     } 
    } 
+2

Нарисуйте простое дерево на бумаге, а затем используя алгоритм в коде, проведите дерево по бумаге. –

+0

Вы должны написать свои собственные домашние задания вместо того, чтобы пытаться получить SO-вкладчиков, чтобы сделать это за вас :( –

+0

Это * не * сквозной обход. –

ответ

1

Как вы редактировали код .so в соответствии с этим -

void traverse(bst *temp) // function to traverse in a bst (parameter as root) 
{ 
    if(temp)   // check temp (if not NULL then proceed) 
    { 
     traverse(bst->left);  // recursive call with root as left child and traverse left sub-tree till it goes to last node. 
     printf("%d",temp->info); // print value of data at current node 
     traverse(bst->right); // recursive call with root as right child and traverse right sub-tree till it goes to last node 
    } 
} 

traverse(bst->left); с этим вызовом идет в последний узел левого поддерева и когда if состояния становится false возвращается к предыдущему вызову и напечатать значение на этом узле, а затем выполнить следующий рекурсивный вызов traverse(bst->right);, а правое поддерево этого текущего корня пройдено до тех пор, пока temp не станет NULL.

+0

да спасибо .. написал в swift..have отредактировал его .... не могли бы вы рассказать мне, как это работает? –

+0

@SuchiSmith Я отредактировал ответ. Пожалуйста, посмотрите. – ameyCU

+0

как элемент управления даже подходит к заявлению printf? каждый раз, когда элемент управления получает переход от траверса (bst-> left). Все вызовы траверса (bst-> left) сохраняются в кадре стека. Когда последний узел достигнут, как выполняется stntfntntnt..и затем, как управление переключается на траверс (bst- > right)? –