将节点连接到树中的下一个兄弟节点

时间:2013-09-19 18:42:09

标签: java performance binary-search-tree

我试图将树中的所有节点连接到他们的直接兄弟姐妹。

例如,root.nextSibling应为null。如果root有2个孩子" a"和" b",a.nextSibling应该是" b"和b应该为空。

我已经完成的工作以水平顺序遍历树,同时为该级别中的所有节点设置nextSibling指针,然后再向下移动到下一级别。

请查看代码,如果有更好的方法可以让我知道吗?

\* In class BinTree.java *\
public void connectSiblings() {
    Queue q = new LinkedList(); 
    if(root!= null) {
        q.add(root);
    }        
    while(!q.isEmpty()) {
       Object[] a = q.toArray();
       for(int i = 0; i < a.length; i++) {
           BinTreeNode node = (BinTreeNode)q.remove();
           if(i == a.length-1) {
               ((BinTreeNode) a[i]).nextSibling = null;
           }
           else {
               ((BinTreeNode) a[i]).nextSibling = (BinTreeNode) a[i+1];
           } 
           if(node.visitLeftChild() != null) {
               q.add(node.visitLeftChild());
           }
           if(node.visitRightChild() != null) {
               q.add(node.visitRightChild());
           }             
       }     
    }
}



\* In class BinTreeNode.java *\
public BinTreeNode visitLeftChild() {
   if(this.leftChild != null) {
       return this.leftChild;
   } 
   return null;
}

\* In class BinTreeNode.java *\
public BinTreeNode visitRightChild() {
    if(this.rightChild != null) {
        return this.rightChild;
    }
    return null;
}

1 个答案:

答案 0 :(得分:0)

BinTreeNode引用其Parent更容易实现。然后兄弟姐妹是父母的孩子,除了this,特殊情况下Root没有兄弟姐妹很容易被父亲null确定。