2016-04-18 7 views
0

So einen binären Baum in JavaScript erstellenUm das erste Element eines Binärbaums einzufügen, setzen Sie es links oder rechts?

function ToBinaryTree (arr) 
{ 
    // creates a binary tree from an array arr of comparable objects 

    this.Tree = { left: undefined, right: undefined }; 

    this.CreateNode = function (value) 
    { 
      return { val : undefined, left : undefined, right : undefined } 
    }; 
    this.Insert = function (elem) 
    { 
      var node = this.CreateNode(elem); 
     if (this.Tree.left == undefined) 
     // ... ?? 
    }; 

    // insert elements from array provided in "constructor" 
    arr.forEach(function(x){ 
     this.Insert(x); 
    }.bind(this)); 

    this.Contains = function (elem) 
    { 
     // ... 
    }; 

    return this; 
} 

Ich versuche, und ich kann das nicht herausfinden, ob eingefügt das erste Element auf right oder left, gehen sollte, und wenn, sagen wir, die left (this.Tree.left), dann überprüfe ich, dass keine Elemente eingefügt werden, indem Sie this.Tree.left == undefined ???

+0

Jeder Knoten hat einen Wert, linken untergeordneten Knoten und rechten untergeordneten Knoten einschließlich des Stammknotens. Speichern Sie das erste Element im Wert des Stammknotens. – Fabricator

+0

Sie können 'arr.forEach (Funktion (x) { this.Insert (x); } .bind (this));' zu 'arr.forEach (Funktion (x) { this.Insert (x) ; }, dies); ' –

Antwort

1

Das erste Element geht auf der Wurzel:

this.CreateNode = function (value) { 
    return { 
    val: value,  // Store the root value here instead of undefined 
    left: undefined, 
    right: undefined 
    }; 
}; 

P.S. Es ist klar, dass dieser Bug nicht das einzige Problem ist, und Sie haben auch einen "Baum" -Konstruktor (?) ... Versuchen Sie nicht, Knoten vom Baum als Ganzes zu unterscheiden, in den meisten Fällen ist es einfacher anzunehmen, dass der Baum der ist Dasselbe wie sein Wurzelknoten und eine zusätzliche "äußere" statische Einfügemethode, die mit einem "Null" oder undefinierten Baumparameter umgehen kann (einen neuen Baum nach Bedarf zurücksendend)

pps Wenn Sie undefined als leeren Baummarker verwenden, können Sie einfach den Wert beim Einfügen überschreiben.