編集:C#BSTからノードを削除 - 正しいトラックにいますか?
私はこれまでに手伝ってくれてありがとうございました。私は使用しています。ステップオーバーして作業していますが、ノードは削除されていません。
私は実際にはBSTに5つの引数を使用しますが、テスト目的では1つだけ使用します。子供が問題ないかどうか比較して見つけます。ちょうどヌルに設定されません。
0または1の子を持つテストノードのみ。
メイン
Tree aTree = new Tree();
aTree.InsertNode("a");
aTree.InsertNode("s");
aTree.InsertNode("3");
aTree.InsertNode("1");
aTree.InsertNode("p");
aTree.PreorderTraversal();
aTree.RemoveNode("p");
aTree.RemoveNode("3");
aTree.PreorderTraversal();
Console.ReadKey();
私の削除方法は以下のとおりです。
ツリーノード
public void Remove(TreeNode root, TreeNode Delete) {
if (Data == null) {
}
if (Delete.Data.CompareTo(root.Data) < 0) {
root.nodeLeft.Remove(root.nodeLeft, Delete);
}
if (Delete.Data.CompareTo(root.Data) > 0) {
root.nodeRight.Remove(root.nodeRight, Delete);
}
if (Delete.Data == root.Data) {
//No child nodes
if (root.nodeLeft == null && root.nodeRight == null) {
root = null;
}
else if (root.nodeLeft == null)
{
TreeNode temp = root;
root = root.nodeRight;
root.nodeRight = null;
temp = null;
}
//No right child
else if (root.nodeRight == null)
{
TreeNode temp = root;
root = root.nodeLeft;
root.nodeLeft = null;
temp = null;
}
//Has both child nodes
else
{
TreeNode min = minvalue(root.nodeRight);
root.Data = min.Data;
root.nodeRight.Remove(root.nodeRight, min);
}
}
}
分
public TreeNode minvalue(TreeNode node)
{
TreeNode current = node;
/* loop down to find the leftmost leaf */
while (current.nodeLeft != null)
{
current = current.nodeLeft;
}
return current;
}
ツリー
を探しますpublic void RemoveNode(string Nation)
{
TreeNode Delete = new TreeNode(Nation);
root.Remove(root, Delete);
}
どのラインでエラーが発生しますか? – Gusman
(Delete.Data.CompareTo(root.Data)<0) 場合、Delete.Data(IF {root.nodeLeft = **(削除、root.nodeLeft)を取り外し ここで** //ボイドエラー}。 (root.nodeRight、Delete); ** //ここでは無効なエラー } – ProblemJack