<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855254</guid>
        <pubDate>Mon, 29 Nov 2021 16:12:11 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855254</link>
        <description><![CDATA[scrambrella: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424283&view=findpost&p=3855200'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-11-29T00:39:56+03:00">28.11.21, 21:39</time></span><div class='quote '><div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><strong class='tag-b'>scrambrella</strong>да, все верно...я его НЕ понимаю, тем более он вводит какой-то собственный язык для всех примеров (насколько я помню) + вроде у него оооооочень много всесторонней математики в объяснениях (всякие алгоритмические доказательства - полная жесть и на мое ИМХО это чуть ли не самое сложное - уметь доказывать тот или иной алгоритм<br>
Мой автор Г.Шилдт) доступно, авторитетно объясняет...</div></div></div></div><br>
Даже пропуская тексты программ можно кое-что понять. Математика в Кнуте относительно понятная, часть алгоритмов с поясняющими картинками. Собственный ЯП Кнута раздражает. Сам его пока не освоил. Как он сам пишет - это что-то близкое к ассемблеру.]]></description>
        <author>scrambrella</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855200</guid>
        <pubDate>Sun, 28 Nov 2021 21:39:56 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855200</link>
        <description><![CDATA[FasterHarder: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><strong class='tag-b'>scrambrella</strong>да, все верно...я его НЕ понимаю, тем более он вводит какой-то собственный язык для всех примеров (насколько я помню) + вроде у него оооооочень много всесторонней математики в объяснениях (всякие алгоритмические доказательства - полная жесть и на мое ИМХО это чуть ли не самое сложное - уметь доказывать тот или иной алгоритм<br>
Мой автор Г.Шилдт) доступно, авторитетно объясняет...</div></div>]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855194</guid>
        <pubDate>Sun, 28 Nov 2021 20:53:18 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855194</link>
        <description><![CDATA[scrambrella: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424283&view=findpost&p=3855105'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-11-26T18:58:41+00:00">26.11.21, 18:58</time></span><div class='quote '><strong class='tag-b'>scrambrella</strong>, Кнута я бы читал с большим удовольствием, если бы не одно НО...</div></div><br>
Лень матушка - единственное но, по которому никто не читает Кнута. Чтение Кнута требует ЗНАЧИТЕЛЬНЫХ умственных усилий, а люди стремятся экономить мышление.]]></description>
        <author>scrambrella</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855105</guid>
        <pubDate>Fri, 26 Nov 2021 18:58:41 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855105</link>
        <description><![CDATA[FasterHarder: В общем у меня вроде(&#33;) все получилось, правда такое чувство, что все это дело можно кодировать гораздо точнее и оптимальнее.<br>
Вот главная функция, которая находит узел, через которую пройдет макс.путь удовлетворяющий условиям:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void Find_root_max_path(BST *proot, BST **pnode_path, int pmax_height)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(proot != NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int current_height = Height(proot-&#62;left) + Height(proot-&#62;right);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(current_height &#62; pmax_height)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pmax_height = current_height;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*pnode_path = proot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Find_root_max_path(proot-&#62;left, pnode_path, pmax_height);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Find_root_max_path(proot-&#62;right, pnode_path, pmax_height);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
а ведь наверняка это можно реализовать ЧЕРЕЗ функцию, которая в качестве ответа вернет указатель на узел, являющийся &quot;точкой перелома&quot; макс.пути - вообще без понятия, как это реализуют на рекурсии... и так сойдет (с) ) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2021-11-26T19:00:04+00:00">26.11.21, 19:00</time></span></span><br>
<strong class='tag-b'>Akina</strong>, спс за помощь<br>
<br>
<strong class='tag-b'>scrambrella</strong>, Кнута я бы читал с большим удовольствием, если бы не одно НО...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855014</guid>
        <pubDate>Thu, 25 Nov 2021 09:39:04 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3855014</link>
        <description><![CDATA[Akina: <strong class='tag-b'>FasterHarder</strong><br>
Ну всё так. <br>
Как я понимаю, у тебя вся проблема - это как именно сделать алгоритмически, верно? Я бы делал так.<br>
<br>
Добавляем каждому узлу свойство &quot;уровень&quot;. У корня - 1, у его дочек - 2, и так далее. Заполняем поиском в ширину или в глубину - как захочешь. Добавляем каждому узлу свойство &quot;длина&quot;. Обрабатываем полученный список поиском &quot;из глубины к поверхности&quot; (т.е. начинаем с макс. глубины, и в порядке уменьшения послойно). Для узла &quot;длина&quot; = 1 + макс(&quot;длина правого&quot;, &quot;длина левого&quot;), при отсутствии потомка справа и/или слева считаем его длину за ноль. Также считаем &quot;текущий максимум&quot; = 1 + &quot;длина левого&quot; + &quot;длина правого&quot; и сравниваем его с текущим глобальным (который изначально нулевой), если больше - запоминаем новое значение. Когда дойдём до корня и обработаем его - выводим полученный глобальный &quot;текущий максимум&quot;.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854980</guid>
        <pubDate>Wed, 24 Nov 2021 17:00:55 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854980</link>
        <description><![CDATA[scrambrella: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424283&view=findpost&p=3854903'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-11-23T19:37:15+00:00">23.11.21, 19:37</time></span><div class='quote '>В вики ЭКСПЕРТЫ(&#33;) пишут, что потомки - все узлы, располагающиеся ниже узла, т е прямые дети НЕ РАВНО потомкам, т к прямых детей узла может быть {0; 1; 2}. Но мне кажется, что в анализе достаточно будет смотреть только на прямых детей.</div></div><br>
Вместо диванных ЭКСПЕРТОВ(&#33;) читайте Кнута.]]></description>
        <author>scrambrella</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854971</guid>
        <pubDate>Wed, 24 Nov 2021 15:45:01 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854971</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>Akina</strong>, у меня есть уже готовая (и работающая) функция нахождение высоты дерева.<br>
В итоге резюмирую алгоритм.<br>
Надо найти среди всех узлов исходного ДДП вершину, у которой left(h) + right(h) --&#62; max. Как это сделать? Обходом (любым), как я понимаю рекурсивным. Думаю, что справлюсь, на крайняк заведу глобальную переменную max_height.<br>
<br>
После этого 3 случая имеем:<br>
1. если левое поддерево пустое, то ответ right(h).<br>
2. если правое поддерево пустое, то ответ left(h).<br>
3. если есть оба сына, то ответ: right(h) + left(h) - 1.<br>
<br>
Один из концов макс. пути - ЛИСТ(&#33;), другой с 1 или 2 детьми. Поэтому в формуле п3 (-1), чтобы подняться на уровень выше от листа.<br>
Еще такой момент: мне ведь по задаче надо найти лишь ДЛИНУ макс.пути, при этом не нужно находить между какими узлами он строится. Хотя добавить эти узлы вроде несложно...<br>
<br>
Если все-таки я где-то прогнал здесь, то просьба поправить)]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854961</guid>
        <pubDate>Wed, 24 Nov 2021 13:31:29 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854961</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424283&view=findpost&p=3854943'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-11-24T10:42:34+00:00">24.11.21, 10:42</time></span><div class='quote '>а неужели нельзя обойтись высотами левого и правого поддерева для текущего узла...<br>
если получить ДЛЯ каждого узла исходного ДДП высоту левого и правого поддерева.</div></div><br>
Так я именно это и описываю. Просто я изначально предполагаю, что ничего этого - ни максимальной для узла глубины ветви его потомков (по отдельности), ни путей, ни чего-то ещё,- не имеется.<br>
<br>
То, что ты говоришь - это в моём описании обратный ход.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854943</guid>
        <pubDate>Wed, 24 Nov 2021 10:42:34 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854943</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424283&view=findpost&p=3854908'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2021-11-24T05:01:46+00:00">24.11.21, 05:01</time></span><div class='quote '>Всё</div></div><br>
)<br>
<br>
а неужели нельзя обойтись высотами левого и правого поддерева для текущего узла...<br>
если получить ДЛЯ каждого узла исходного ДДП высоту левого и правого поддерева. Разве MAX(left(h) + right(h)) не будут показывать узел, который является точкой перелома макс.пути? Ведь если знать корень поддерева, через который проходит макс.путь, то дальше вроде уже легко становится (вроде&#33;)]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854908</guid>
        <pubDate>Wed, 24 Nov 2021 05:01:46 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854908</link>
        <description><![CDATA[Akina: Навскидку рисуется такое.<br><br>Строим пути от корня ко всем листьям. Дополняем каждый узел его уровнем и, возможно, полным путём. Если что лишнее - потом при оптимизации удалится. Идём обратно. Для каждого не-листа имеем 1 или 2 потомка. У каждого потомка имеется свой текущий максимальный путь. Соответственно получаем два значения - максимальный путь от текущего узла до дальнего листа (тот самый текущий максимальный путь) и длину пути через текущий узел до дальних листьев. Забираемся так по дереву до корня. В результате получаем массив максимальных путей, откуда берём самый-самый максимум. Всё.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854903</guid>
        <pubDate>Tue, 23 Nov 2021 19:37:15 +0000</pubDate>
        <title>Поиск пути в бинарном дереве</title>
        <link>https://forum.sources.ru/index.php?showtopic=424283&amp;view=findpost&amp;p=3854903</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу к делу&#33;<br>
<br>
Есть такая структура, описывающая узел ДДП:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">структура &quot;Узел дерева&quot;</div><div class="code_line">&nbsp;&nbsp;ключ (целое)</div><div class="code_line">&nbsp;&nbsp;ссылка на левое</div><div class="code_line">&nbsp;&nbsp;ссылка на правое</div></ol></div></div></div></div><br>
<br>
И надо найти максимальный путь между его 2мя вершинами (любыми), причем эти вершины должны иметь различное число потомков. В бинарном дереве не меньше 2ух узлов.<br>
----------------------------------------<br>
В вики ЭКСПЕРТЫ(&#33;) пишут, что потомки - все узлы, располагающиеся ниже узла, т е прямые дети НЕ РАВНО потомкам, т к прямых детей узла может быть {0; 1; 2}. Но мне кажется, что в анализе достаточно будет смотреть только на прямых детей.<br>
<br>
Вроде гарантировано, что макс. путь проходит ЧЕРЕЗ корень дерева, даже, если отсутствует какая-либо ветвь у корня, поправьте, если не так это.<br>
Находим высоту левого поддерева (от корня). Если левой ветви нет, то высота = 0, ничего страшного, это не мешает алгоритму. Если левая ветвь есть, то гарантировано первый узел, от которого строится искомый путь, является ЛИСТОМ, иначе от корня строится путь и он имеет одного прямого ребенка.<br>
<br>
Находим высоту правого поддерева (от корня). второй узел, до которого строится путь является листом.<br>
Если слева был лист и справа был лист, то макс. путь = высота (слева) + высота(справа) - 1 ??<br>
Если слева нет поддерева от корня, то макс. путь = высота (справа)??<br>
<br>
Т е для решения надо применить ТОЛЬКО вспомогательную функцию получения высота заданного дерева, да?? Или здесь все гораздо тоньше? Были мысли делать БФС еще...не знаю...<br>
<br>
подскажите, как быть-то, буду признателен<br>
<br>
p.s. не исключаю, что все, что выше написал по своему алгоритму является чушью и алгоритм здесь абсолютно другой нужен) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2021-11-23T19:45:55+00:00">23.11.21, 19:45</time></span></span><br>
кстати, я понял, что макс.путь необязательно должен проходить через корень исходного ДДП...мда..сложнее тут все (как обычно&#33;).<br>
значит, надо сначала найти &quot;корень&quot;, так сказать точку перегиба макс. пути...]]></description>
        <author>FasterHarder</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	