二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree),右边的总是大于左边的!二叉树的每个结点至多只有二棵子树(不存在出度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
1 function Node(num) 2 { 3 this.num = num; 4 this.count = 1; 5 this.pLeft = null; 6 this.pRight = null; 7 } 8 9 10 function createNode(value) 11 { 12 var pNode = new Node(value); 13 pNode.num = value; 14 pNode.count = 1; 15 pNode.pLeft = null; 16 pNode.pRight = null; 17 return pNode; 18 } 19 20 21 function addNode(value, pNode) 22 { 23 if (pNode == null){ 24 return createNode(value); 25 } 26 if (value == pNode.num){ 27 pNode.count++; 28 return pNode; 29 } 30 if (value < pNode.num){ 31 if (pNode.pLeft == null){ 32 pNode.pLeft = createNode(value); 33 return pNode.pLeft; 34 }else{ 35 return addNode(value, pNode.pLeft); 36 } 37 }else{ 38 if (pNode.pRight == null){ 39 pNode.pRight = createNode(value); 40 return pNode.pRight; 41 }else{ 42 return addNode(value, pNode.pRight); 43 } 44 } 45 } 46 47 var list = [10,8,15,2,14,16,20,7,5,13,60,34,1,10]; 48 var pRoot = null; 49 var lent = list.length; 50 51 for(var i=0; i<lent; i++){ 52 if (pRoot==null){ 53 pRoot = createNode(list[i]); 54 }else{ 55 addNode(list[i], pRoot); 56 } 57 } 58 console.info(pRoot);
结果如图
用户js、php这些语言玩数据结构比C语言 好玩太多了!!!