衆所周知,當插入一個完整的二叉樹時,我們必須從左到右填充所有葉子的所有子元素。我有以下方法將節點插入完整的二叉樹。如何在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.有沒有辦法將根改回原來的值?我正在嘗試在不使用堆棧和隊列的情況下完成此操作。
可能重複? http://stackoverflow.com/questions/20890929/how-to-implement-a-complete-binary-tree-using-recursion-without-comparing-the-va –
@JimMischel我的問題不同於你鏈接的問題。他們的解決方案看起來與我的同一個地方失敗。此後,我已經想出了實施該方法的正確方法,這要感謝Dukeling。我將稍後發佈解決方案。 – Buttyfade