如何在Java中将节点插入到完整的二叉树中?

褪色

众所周知,当插入一棵完整的二叉树时,我们必须从左到右填充所有叶子的所有孩子。我有以下方法将节点插入到完整的二叉树中。

//fields
private T item;
private int size;
private CBTree<T> left, right;

//add method
public void add(T item) 
{
    if(left == null)
    {
        left = new CBTree<T>(item);
        size += left.size;
    }
    else if(right == null)
    {
        right = new CBTree<T>(item);
        size += right.size;
    }
    else if(!((left.left != null) && (left.right != null)) && 
           ((right.left == null) || (right.right == null)))
    {
        left.add(item);
    }
    else
    {
        right.add(item);
    }
}

此实现的问题在于,在第 11 个节点之后,它将第 12 个节点添加到 8 的左子节点而不是 6。我知道发生这种情况是因为以下行将这棵树的根重新分配为根。

left.add(item);

所以它正在将根更改为 2。有没有办法将根更改回其原始值?我试图在不使用堆栈和队列的情况下完成此操作。

褪色

感谢 Dukeling 的回答,实现该方法的正确方法是从数学上确定子树是否已满。这是代码:

//fields
private T item;
private int size;
private CBTree<T> left, right;

//add method
public void add(T item) 
{
    if(left == null)
    {
        left = new CBTree<T>(item);
    }
    else if(right == null)
    {
        right = new CBTree<T>(item);
    }
    else if(leftFull())
    {
        right.add(item);
    }
    else
    {
        left.add(item);
    }
    size++;
}

//Checks if the left subtree is full
public boolean leftFull()
{
    int used, leafs = 1;
    while(leafs <= size + 1)
    {
        leafs *= 2;
    }

    leafs /= 2;
    used = (size + 1) % leafs;
    if(used >= (leafs / 2))
    {
        return true;
    }
    else
    {
        return false;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C中的二叉树中插入新节点?

来自分类Dev

插入完整的二叉树

来自分类Dev

完整二叉树中的叶节点数

来自分类Dev

无法在二叉树中插入新节点

来自分类Dev

无法在二叉树中插入新节点

来自分类Dev

在二叉树Java中查找并返回节点

来自分类Dev

如何找到二叉树中节点的位置?

来自分类Dev

如何在Haskell中定义二叉树?

来自分类Dev

如何在Matlab中实现二叉树

来自分类Dev

如何在Matlab中实现二叉树

来自分类Dev

二叉树将值插入节点。爪哇

来自分类Dev

二叉树将值插入节点。爪哇

来自分类Dev

使用指针将节点插入二叉树

来自分类Dev

如何在Java中删除二叉树的根?

来自分类Dev

如何在C ++中获取非二叉树中特定节点的所有子节点

来自分类Dev

完整二叉树的高度

来自分类Dev

如何将新节点插入二叉树?

来自分类Dev

如何将新节点插入二叉树?

来自分类Dev

C ++:指针与指针的指针在二叉树中插入节点

来自分类Dev

如何在二叉树中找到距给定节点k个距离的节点

来自分类Dev

如何在二叉搜索树中查找节点

来自分类Dev

递归访问二叉树中的节点

来自分类Dev

在二叉树中查找节点的父级

来自分类Dev

Prolog中的二叉树计数节点

来自分类Dev

在二叉树中以相同深度链接节点

来自分类Dev

删除二叉树中的节点

来自分类Dev

在二叉树中查找节点的父级

来自分类Dev

递归查找二叉树中节点的路径

来自分类Dev

在二叉树中以相同深度链接节点