【问题标题】:Connecting nodes to their next sibling in a tree将节点连接到树中的下一个兄弟节点
【发布时间】:2013-09-19 18:42:08
【问题描述】:

我已经尝试将树中的所有节点连接到它们的右兄弟。

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

我所做的是按级别顺序遍历树,同时为该级别中的所有节点设置 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;
}

【问题讨论】:

  • 更好的意思不是使用已经这样做的内置类?
  • 不。我不是那个意思。寻找具有更好时间复杂度的东西。或者如果可能的话,可以递归地实现这一点。

标签: java performance binary-search-tree


【解决方案1】:

这更容易通过 BinTreeNode 引用它的 Parent 来完成。那么 Siblings 是 Parent 的 Children 除了 this,而 Root 没有兄弟姐妹的特殊情况很容易被 Parent 确定为 null

【讨论】:

  • 当树有 3 个级别时,这将如何工作?在二叉树中,一个节点严格来说有两个孩子。如果第 2 层有 2 个子节点,叶子层有 4 个子节点,则其中 3 个应指向其右侧的节点,第 4 个应指向 null。当您有对父节点的引用时,您可以为同一个父节点的节点设置引用,但是父节点的右子节点如何指向另一个父节点的左子节点?
  • 父母兄弟姐妹的孩子是堂兄弟。要包括表兄弟,添加 Parent's Siblings Children 是上述内容的简单扩展。
猜你喜欢
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多