H5C3J 学习笔记 part4 Tree2

今天受到了一次不小的打击,虽然是我预期中的-_-#

平衡数,答对,但未存盘(WTF!)
最大临近数,答对。
二叉树可见结点数量,没写对 --###
同类项分区,没写对 -
-b
纯英文试卷和结束后的虚脱感,让我又回想起当年考SCJP后走出考场的时候。

然后觉得,作为非科班出身的程序员,基础知识有时候真的非常重要。
所以跟白爷借了算法基础的书,准备啃一点算一点。

今天值得纪录的有,获得二叉树的深度:

 function getTreeDeep(tree)  
 {  
   var lDeep = 0;  
   var rDeep = 0;  
   var result = 0;  
   if(tree != null)  
   {  
     lDeep = getTreeDeep(tree.l);  
     rDeep = getTreeDeep(tree.r);  
     result = Math.max(lDeep,rDeep) + 1;  
   }  
   return result;  
 }  
`</pre>
我的笨方法,按层级初始化树的数据,后面看看书,看看能不能做得科学一点。

<pre>` function createTree(vs,tl) {  
   var values = vs;  
   var totalLayers = tl;  
   var layerIndex = 0;  
   var maxNodeNumber;  
   var lastArr;  
   var tempArr;  
   var parentNode;  
   var root;  
   for (var i = 0; i < totalLayers; i++) {  
     tempArr = new Array();  
     maxNodeNumber = Math.pow(2, i);  
     for (var j = 0; j < maxNodeNumber; j++) {  
       var parentIndex = parseInt(j / 2);  
       var lOrR = j % 2;  
       var v = values[layerIndex++];  
       var tree = null;  
       if (v != null) {  
         tree = new Tree(v);  
         if (layerIndex == 1) {  
           root = tree;  
         }  
         tempArr.push(tree);  
       }  
       if (lastArr != null) {  
         parentNode = lastArr[parentIndex];  
       }  
       if (parentNode != null && tree != null) {  
         if (lOrR == 0) {  
           parentNode.l = tree;  
         } else {  
           parentNode.r = tree;  
         }  
       }  
     }  
     lastArr = tempArr;  
   }  
   return root;  
 }  

Ivank的注册帧监听,跟Flash一样好用,赞!

然后有了这样一个Demo