//搜尋二叉樹的節點
private static class stnode
}//end class stnode
//add()插入節點
public boolean add(t item)
else if(ordervalue < 0)
else
}//end while
newnode = new stnode(item, parent);
if(parent == null)
else if(ordervalue < 0)
else
treesize ++;
modcount ++;
return true;
}//end add()
//remove()刪除指定節點
private void removenode(stnodednode)
stnodepnode,rnode;
pnode = dnode.parent;
//要刪除的節點至少有乙個子節點為空的情況
if(dnode.left == null || dnode.right == null)
else
//要刪除的節點不為空
if(rnode != null)
if(pnode == null)
else if(((comparable)dnode.nodevalue).compareto(pnode.nodevalue) < 0)
else
}//end if
//當兩個節點都不為空的時候,選擇比要刪除節點大的最小的節點作為目標節點,
//把目標節點的值和要刪除節點互換,然後目標節點節點。
//找到的目標節點有兩種情況,要麼為要刪除節點的右節點且左子節點為空,dnode.right = rnode.right;
//要麼目標節點的左子為空,且目標節為父節點的左子節點。pofrnode.left = rnode.right;
else
dnode.nodevalue = rnode.nodevalue;
if(pofrnode == dnode )
else
if(rnode.right != null)
}//end else
}//end remove()
//remove()根據值刪除節點
public boolean remove(object item)
removenode(dnode);
treesize --;
modcount++;
return true;
}//end remove(object item)
//找到指定的節點
private stnodefindnode(object item)
else if(ordervalue < 0)
else
}//end while
return null;
}//end findnode()
//內部類構造迭代器
private class iteratorimpl implements iterator
}}//end 建構函式
public boolean hasnext()
public t next()
lastreturned = nextnode;
stnodep ;
//當前節點的右子節點不為空
//找到右子節點中德最小值,即最左邊的值
if(nextnode.right != null)
}//當前節點的右子節點為空
//向上遍歷知道當前節點為父節點的左子節點為止
//則該父節點就是要找的下乙個節點
else
nextnode = p;
}return lastreturned.nodevalue;
}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...