이것은 이 아니며이 아닌 BinarySearchTree입니다. 일반적인 이진 트리입니다. 여기삽입 메서드가 작동하지 않습니다. 이진 트리 Java
public class RegularTree extends BinaryTree {
public RegularTree() {
super();
}
public void insert(Comparable item) {
if(this.isEmpty()) {
this.setRoot(new TreeNode(item));
return;
}
TreeNode t = this.getRoot();
while(t != null) {
if(t.getLeft() == null)
t.setLeft(new TreeNode(item));
else if(t.getRight() == null)
t.setRight(new TreeNode(item));
else {
if(size(t.getLeft()) > size(t.getRight()))
t = t.getRight();
else
t = t.getLeft();
}
}
}
public int size(TreeNode node) {
return(getSize(node));
}
private int getSize(TreeNode node) {
if (node == null)
return(0);
else
return(getSize(node.getLeft()) + 1 + getSize(node.getRight()));
}
public TreeNode find(Comparable key) {
TreeNode p = this.getRoot();
while(p != null && key.compareTo(p.getValue()) != 0) {
if(key.compareTo(p.getValue()) < 0)
p = p.getLeft();
else
p = p.getRight();
}
return p;
}
public void inorder() {
doInorderTraversal(this.getRoot());
}
private void doInorderTraversal(TreeNode t) {
if(t != null) {
doInorderTraversal(t.getLeft());
System.out.print(t.getValue() + " ");
doInorderTraversal(t.getRight());
}
}
}
내 주요 방법 :
1
/ \
2 3
/\ /
4 5 6
나무 :
public static void main(String[] args) {
RegularTree tree = new RegularTree();
tree.setRoot(new TreeNode(1));
tree.insert(2);
tree.insert(3);
tree.insert(4);
tree.insert(5);
tree.insert(6);
tree.inorder();
}
이이처럼 보이는 나무를 생성해야
여기 내 RegularTree 클래스입니다. inorder()는 트리의 inorder 순회를 수행해야합니다. 즉, 출력해야 함을 의미합니다. 4 2 5 1 6 3
그러나 메인 메서드를 실행할 때 아무 일도 일어나지 않습니다. 내 삽입 방법에 문제가 있다고 생각하지만 확실하지 않습니다.
내가 한 –
가 다른 문제가 될,하지만 난 삽입 방법은 {오른쪽, 왼쪽} t.set를 호출 한 후 루프를 종료해야한다고 생각 당신이 말했듯이 나무가 지금 삽입 중입니다. 그러나, 내 inorder() 메서드는 다음 숫자를 인쇄합니다 : 4 2 6 1 5 3 어떤 이유로 5와 6 잘못된 위치에 가고 있습니다. inorder() 메서드에 문제가 있다고 생각하지 않습니다. 내 BinarySearchTree에서 제대로 작동했기 때문입니다. – zaynv