Wpis z mikrobloga

Najłatwiej zrobić klasę (w js najłatwiej przy użyciu prototypów - nie jest to do końca klasa, ale nie ma to dla Ciebie znaczenia), która zawiera dwa pola - lewego i prawego syna (właściwie to przynajmniej trzy pola, bo jeszcze chcesz coś tam trzymać). Każdy syn jest znowu drzewem zawierającym lewego i prawego syna. W ten sposób otrzymujesz drzewo binarne (każdy węzeł o stopniu max dwa). Każde drzewo o stopniu większym niż dwa
@AhoCorasick:
Problem mam taki, znajdź najbliższy wspólny wierzchołek dla "bD" i "aC", no wiadomo "A"

var root = new Tree("A")
root.children.push(new Tree("aB"))
root.children.push(new Tree("aC"))
root.children[0].push(new Tree("bD"))

Zatem brakuje mi jakiegoś find() tylko się gubię jak zrobić tę rekurencję. Możesz mi podrzucić jakąś literaturę pod to?
problem nazywa sie najniższy wspólny przodek. Istnieje tysiąc algorytmów w zależności jakie masz limity czasowe. Tak super najłatwiej to zapamiętać na jakim poziomie (licząc od góry) jest każdy węzeł. Następnie bierzesz węzeł znajdujący się bliżej korzenia, a dla drugiego węzła idziesz kilka razy w górę, żeby mieć przodka na poziomie tego drugiego węzła. potem z każdego węzła idziesz o jeden do góry aż trafisz na ten sam węzeł. złożoność obliczeniowa i czasowa