Sto avendo un albero binarioritrovamento somma massima possibile accordo triangolare
2
/ \
3 4
/\ \
5 1 8
/\ /\
1 6 9 2
\
4
voglio trovare il maximum possible triangular chord info sum
di nodi (tra due foglie e un nodo con entrambi i bambini a destra ea sinistra) nella struttura di data .
un accordo triangolare sarà
per accordo triangolare:
solo immaginare una linea tra due foglie, vanno verso l'alto in direzione della radice, trovare un genitore comune (che può essere genitore, nonno, grandgrandparent o addirittura la radice stessa). Mentre si muove verso l'alto, per ogni foglia (per ogni foglia o dobbiamo andare solo verso sinistra e sinistra sinistra ... e così OR o solo destra destra destra destra ... e così) significa (la foglia sinistra si muoverà solo verso l'alto solo right
e la foglia destra si sposterà solo verso l'interno left
..... Quindi per ogni singola foglia, we can not move in both direction while moving upwards
) .. Ora otteniamo una forma triangolare .. in cui a side may contain any no. of nodes/links possible
.. ORA, se questo triangular shape does not contain any extra internal branches
. quella forma triangolare sarà una corda triangolare.
ricordo che every leaf node is also always a triangular chord
(E 'solo per creare i casi di default, se l'albero binario non hanno alcuna triangolare corda a forma)
ora
maximum triangular chord will be that triangular chord
which have maximum total in sum of all its node info.
ci viene richiesto di return that maximum total.
If we do not have triangular shaped chord..
then we have to return the leaf with maximum info.
per esempio
8
/\
2 3
\
3
è un accordo triangolare
8
/\
2 3
\ \
4 1
sottoalbero solo singolo nodo 4 sarà corda massima triangolare (come somma è maggiore di un altro accordo triangolare con singolo nodo 1) Non tutto l'albero sarà accordo triangolare
8
/\
2 3
/ \
4 3
è un accordo triangolare
così la soluzione del primo albero sulla prima linea di domanda è
8+9+2+4 = 23
sono intrappolato in questo problema.
Ho un approccio grezzo
io ricorsivamente chiamare leftchild come radice della sottostruttura e trova fianco massima somma accordo triangolare quindi uguale per rightchild come radice della sottostruttura.
aggiungere il massimo di leftmax e rightmax, e la aggiunge al nodo Rood e tornare
in C++ mycode è:
int maxtri(node* n)
{
if(n)
{
lsum = maxtri(n->left);
rsum = maxtri(n->right);
k = maxof(lsum,rsum);
return (n->info + k);
}
}
edit: il mio un altro approccio ricorsivo
int l =0, r =0;
int maxtri(node* n)
{
if (n == NULL) return 0;
if (!(n->left) && !(n->right)) return n->info;
if ((n->left) && (n->right))
{
l = maxtri(n->left);
r = maxtri(n->right);
}
if ((n->left) && !(n->right))
{
l = l + maxtri(n->left);
}
if (!(n->left) && (n->right))
{
r = r + maxtri(n->right);
}
return (l+r+n->info);
}
i avere dubbi sul mio approccio.
qualcuno può dare un'altra soluzione?
È questo compito? Che cosa hai provato? Mostraci un codice. – MarioDS
voglio ottenere l'approccio giusto prima di iniziare la codifica. quindi ho dato il mio approccio approssimativo. e codifica grezza pure. ora plz correggere il mio approccio. – codeofnode
non è esattamente ciò che StackOverflow è, leggi [faq]. Inoltre, quale linguaggio di programmazione è quello? – MarioDS