Jsem v procesu konverze rekurzivní funkce pro BST, jež nejsou rekurzivní pomoci připravit na pohovor. Zatím jsem zjistil, předobjednávky, nezbytného, postorder, vyhledávání, mazat, vkládat, a převedením BST do kruhového propojeného seznamu. Mám potíže přijít na to, jak použít zásobník nebo fronty získat výšku a zjistit, zda se jedná o BST. Nějaké tipy by bylo velmi ocenil. Nejsem hledá kód, ale logika kódu.
Pseudokód pro non-rekurzivní provádění výšky stromu a isBST
Pro začátek, skvělou práci, příprava na pohovor, jako je tento! Doufám, že jste baví hrát si s těmito algoritmy.
Začněme s úkolem se snaží zjistit, zda je binární strom je BST. Jedním ze způsobů, jak toho dosáhnout, je provést nezbytného chůze stromu a zkontrolujte, zda jsou prvky v seřazeném pořadí. To bude platit v případě, a to pouze v případě, že strom je BST. Vzhledem k tomu, že již máte kód do činění s nezbytného chůze prvků stromu, měli byste být schopni snadno přizpůsobit svůj kód pro kontrolu, zda jsou prvky, které přicházejí z nezbytného chůze jsou řazeny dle sledování posledního prvku, který viděl v nezbytného chůze, pak porovnáním každý prvek generován na předchozí prvek. V případě, že dva jsou mimo provoz, strom není BST.
Chcete-li určit výšku stromu, jednou z možností by bylo, aby se některý z vyhledávacích dotazů, které jste přijít s dosud (předobjednání, postorder, nezbytného) a sledovat výšky stohu v každém bodě. Myšlenka je, že od té doby váš stack bude vždy sledovat cestu zpět z libovolného uzlu až ke kořenu, můžete prostě jít na strom a zaznamená nejhlubší, že jsi někdy viděl zásobník stát. Tato maximální hloubka je pak výška stromu.
Snad to pomůže! A hodně štěstí s rozhovory!
Chcete-li zjistit výšku stromu, můžete použít [čas O (n)] Morris průchod].
Chcete-li zjistit, zda se jedná o platný BST, dělat nezbytného chůze stromu. Přesunout prvky do pole. pokud se třídí pole či nikoli ověřit BST zkontrolovat.













