방금 이진 트리에 대해 배웠고 삽입 방법을 만들려고했습니다. 내 첫 번째 방법은 효과가 없었고 조금 수정했습니다. 이제는 작동하지만 이전 방법이 실패한 이유를 이해할 수 없습니다. 작동하지 않는바이너리 트리 : 하나의 삽입 방법이 작동하지 않는 이유
방법은 다음과 같습니다
if(root == null)
{
root = new Node(data);
}
else if(data < root.getData())
{
insertNode(root.getLeft(), data);
}
else
{
insertNode(root.getRight(), data);
}
일이 않는 방법 :이 경우 이유에
if(data < root.getData())
{
if(root.getLeft() == null)
{
root.left = new Node(data);
}
else
{
insertNode(root.getLeft(), data);
}
}
else
{
if(root.getRight() == null)
{
root.right = new Node(data);
}
else
{
insertNode(root.getRight(), data);
}
}
어떤 설명? 내가 보는 방식 때문에 루트는 root.left와 같아야합니다. 따라서 루트를 새로운 노드로 설정하는 것은 root.left/right를 새 노드로 설정하는 것과 동일해야합니다.
두 번째 코드의 예외/문제점은 무엇입니까? 나는 두 번째 코드에서 루트 == null 체크를 보지 못했다. 이 경우 첫 번째 요소를 삽입 할 수 없습니다. – JohnnyAW
@JohnnyAW : 첫 번째 코드에서 insertNode (null, data)를 호출하면 작동하지 않습니다. 하지만 그것을 얻으려면 시간이 필요했습니다 ^^ –
@ user2776326 루트가 null 인 경우 데이터와 비교할 때 두 번째 코드가 문제가되는 것 같습니까? –