
假设使用
int[]data具有基于0的索引的数组,我们有一个简单的函数来获取子级:
int getLeftChild(int index){ if(index*2 + 1 >= data.length) return -1;// -1 Means out of bound return data[(index*2) + 1]; } int getRightChild(int index){ if(index*2 + 2 >= data.length) return -1;// -1 Means out of bound return data[(index*2) + 2]; }编辑:好的,因此通过维护队列,我们可以构建此二叉树。
我们使用队列来维护尚未处理的节点。
使用变量计数来跟踪为当前节点添加的子代数。
首先,创建一个根节点,将其分配为当前节点。因此,从索引1开始(索引0为根),由于计数为0,我们将此节点添加为当前节点的左子节点。增加数量。如果此节点不是“#”,则将其添加到队列中。
移至下一个索引,计数为1,因此我们将其添加为当前节点的右子节点,将计数重置为0并更新当前节点(通过将当前节点分配为队列中的第一个元素)。如果此节点不是“#”,则将其添加到队列中。
int count = 0; Queue q = new Queue(); q.add(new Node(data[0]); Node cur = null; for(int i = 1; i < data.length; i++){ Node node = new Node(data[i]); if(count == 0){ cur = q.dequeue(); } if(count==0){ count++; cur.leftChild = node; }else { count = 0; cur.rightChild = node; } if(data[i] != '#'){ q.enqueue(node); } } class Node{int data;Node leftChild, rightChild; }