ragazzi Va bene, mi è stato chiesto a questa domanda in un'intervista oggi e va in questo modo:Un albero binario contiene un altro albero?
"Dillo, se un albero binario è contenuto all'interno di un altro albero binario o meno (contiene implica sia nella struttura ed il valore dei nodi)"
ho pensato alla seguente approccio:
appiattire l'albero più grande come:
{{{-}a{-}}b{{-}c{-}}}d{{{-}e{{-}f{-}}}g{{{-}h{-}}i{{-}j{-}}}}
(ho fatto in realtà scrivere il codice per questo, {-}
implica vuoto lef t o destra sotto-albero, ogni sotto-albero è racchiuso all'interno di {} paranthesis)
Ora per i più piccoli sotto-albero abbiamo bisogno di corrispondere a questo modello:
{{.*}e{.*}}g{{{.*}h{.*}}i{{.*}j{.*}}}
dove {.*}
denota un vuoto o non sottostruttura vuota.
Nel momento in cui ho pensato, si tratterebbe di un semplice motivo di associazione di espressioni regolari in java, ma sono confuso. In realtà ora mi sento, ho appena trasformato il problema (creato un mostro da un altro).
C'è un semplice regex di un rivestimento per abbinare questi modelli? Capisco che potrebbero esserci altri approcci per risolvere questo problema e questo potrebbe non essere il migliore. Mi chiedo solo se questo è risolvibile.
"nella struttura" significa "lo stesso oggetto" o ".equals() [con l'implementazione appropriata]? Ad esempio, se l'albero uno è una foglia con valore" 4 "e l'albero due ha anche una foglia con valore" 4 "(ma che è un oggetto diverso dall'albero uno), l'albero due ne contiene uno uno? –
Non vedo un requisito nella domanda posta inizialmente per usare le espressioni regolari.Era questa parte dell'intervista? Reg-exes Sembra davvero uno strumento sbagliato per questo lavoro: –
Insieme a @DarkFalcon, sospetto che un algoritmo che * deve * attraversare l'insieme di entrambi gli alberi potrebbe non essere quello che gli intervistatori speravano. Dopo tutto, dopo aver visto i primi nodi di due alberi, è possibile determinare quali sottostrutture potrebbero sovrapporsi e quali no, anche se si desidera utilizzare le presentazioni di stringa degli alberi, purché i delimitatori siano bilanciati, non è possibile Lo fai solo controllando se la stringa dell'albero eventualmente contenuta è una sottostringa dell'albero che potrebbe contenere? –