Created
September 16, 2015 20:04
-
-
Save andijcr/8a49ea279a9f54c38f3f to your computer and use it in GitHub Desktop.
convert a tree representation as (H2,((H4,H5)H3,H6)H7)H1 in a object structure
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Tree = function(lbl, lT, rT){ | |
this.label=lbl | |
this.leftTree= lT | |
this.rightTree= rT | |
}; | |
function isAlphaNumeric(char) { | |
var code | |
code = char.charCodeAt(0); | |
if (!(code > 47 && code < 58) && // numeric (0-9) | |
!(code > 64 && code < 91) && // upper alpha (A-Z) | |
!(code > 96 && code < 123)) { // lower alpha (a-z) | |
return false; | |
} | |
return true; | |
} | |
function tree(str){ | |
if(!isAlphaNumeric(str.charAt(0))){ //è un albero | |
var partial_left=tree(str.substring(1)) //substring dal dopo la parentesi aperta | |
var partial_right=tree(partial_left[1].substring(1)) //substring da dopo la virgola | |
var label=""; | |
//parto da 1 per saltare la parentesi chiusa | |
var i=1 | |
for(i=1; isAlphaNumeric(partial_right[1].charAt(i)); i++){ | |
label+=partial_right[1].charAt(i); | |
} | |
return [new Tree(label, partial_left[0], partial_right[0]), partial_right[1].substring(i)] | |
}else{ //è una foglia | |
var lbl="" | |
var j=0; | |
while(isAlphaNumeric(str.charAt(j))){ | |
lbl+=str.charAt(j) | |
j++ | |
} | |
return [new Tree(lbl, null, null), str.substring(j)] | |
} | |
} | |
function getTree(treeString){ | |
var str='' | |
for(i=0; i<treeString.length; i++){ | |
if(treeString.charAt(i)===' '){ | |
continue; | |
} | |
str+=treeString.charAt(i); | |
} | |
return tree(str)[0] | |
} | |
var aTree="(H2,((H4,H5)H3,H6)H7)H1" | |
getTree(aTree); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment