0
Javaで指定された入力値int xを含む場合、バイナリ検索ツリー内のノードを削除する非再帰的メソッドを記述しようとしています。私はスタックを使用する必要があると思ったが、ノード自体を呼び出さずにノードを削除する方法を見つけることはできないようだ。バイナリ検索ツリー:指定された値xを持つTreeNodeをJavaを使用して再帰的に削除します。
これは現在のTreeNodeクラスです。
class TreeNode {
private int data; // data item (key)
private TreeNode left; // this node's left child
private TreeNode right; // this node's right child
// The "external node" is a special node that acts as a sentinel.
private final static TreeNode externalnode = TreeNode.createExternalNode();
/* Return a TreeNode that represents an "external node"*/
public static TreeNode getExternalNode() {
return externalnode;
}
/* Creates a new TreeNode with no children.
*/
public TreeNode(int id) { // constructor
data = id;
left = externalnode;
right = externalnode;
}
私はこれを試しましたが、うまく動作しません。
public TreeNode removeB(int x){
if (this == externalnode) return externalnode;
TreeNode one = new TreeNode(this.data);
System.out.println(this);
Stack<TreeNode> s = new Stack();
s.push(one);
//System.out.println(s);
boolean check;
boolean check1;
while(check = true){
if(x == one.left.data){
System.out.println(one.left.data);
check = false;
return one.left;
}
if(x == one.right.data){
System.out.println(one.right.data);
check1 = false;
return one.right;
}
}
'removeNode()'に関してこれまでに試したことを含めてください。私の提案は、広く文書化されているその方法の標準的な再帰的な解をまず実装し、それを反復的なものに適合させることです。唯一の違いは、ノードの検索中です。ここでは、再帰の代わりに 'while'ループを使用します。実際に親子リンクロジックを処理するコードは、非常に似ているはずです。 – Jameson
@Jamesonコードを更新して追加しました –