pracuję nad „Convert posortowanej tablicy do binarne drzewo poszukiwań Przy minimalnej wysokości”, który zapytał:Konwersja posortowanej tablicy do binarne drzewo poszukiwań
Biorąc pod uwagę sortowane (rosnące) tablica, przekształcić go stworzyć drzewo binarne o minimalnej wysokości.
Nie jestem w stanie ustalić, dlaczego moja rekurencja nie kończy się tak, jak się spodziewałem. Powinien przestać, gdy minie 7, i nie wydrukuje ponownie 7. Znalazłem też podobną odpowiedź, wygląda na to, że użyłem tej samej strategii co moja, ale działa dobrze. (Nie sądzę, aby moje pytanie było duplikatem tych pytań wymienionych powyżej, ale nadal chcę podziękować ci za ich linkowanie.) Dali mi więcej pomysłu na rozwiązanie mojego problemu.)
Mój kod jest poniżej:
public TreeNode sortedArrayToBST(int[] A) {
int len = A.length;
if(len <= 0){
return null;
}
TreeNode root = new TreeNode(A[(len - 1)/2]);
if(len == 1){
return root;
}
else{
helper(root, A, 0, len - 1);
}
return root;
}
public void helper(TreeNode root, int[] A, int leftPoint, int rightPoint){
if((rightPoint - leftPoint) <= 0){
return;
}
int mid = (rightPoint - leftPoint)/2 + leftPoint;
int leftChild = (mid - 1 - leftPoint)/2 + leftPoint;
int rightChild = (rightPoint - (mid + 1))/2 + mid + 1;
TreeNode left = new TreeNode(A[leftChild]);
root.left = left;
TreeNode right = new TreeNode(A[rightChild]);
root.right = right;
helper(root.left, A, leftPoint, mid - 1);
helper(root.right, A, mid + 1, rightPoint);
return;
}
Kiedy go uruchomię, mam to.
Moje wejście
[1,2,3,4,5,6,7,8]
moje wyjście
{4,2,6,1,3,5,7,#,#,#,#,#,#,7,8}
Oczekiwany
{4,2,6,1,3,5,7,#,#,#,#,#,#,#,8}
Dlaczego to duplikat 7 po prawej stronie? Ponieważ 7 zostało użyte, powinno zostać wyrzucone.
I znalazłem mój pomysł jest podobny do poniższego odpowiedź:
public TreeNode sortedArrayToBST(int[] A) {
// write your code here
int len = A.length;
if(len <= 0){
return null;
}
TreeNode root = helper1(A, 0, len - 1);
return root;
}
public TreeNode helper1(int[] A, int low, int high){
if(low > high){
return null;
}
int mid = (high + low)/2;
TreeNode root = new TreeNode(A[mid]);
root.left = helper1(A, low, mid - 1);
root.right = helper1(A, mid + 1, high);
return root;
}
Czy próbowałeś debugowanie? Najprawdopodobniej znajdziesz problem. – luizfzs
Próbowałem debugowania i uruchomiłem go również na papierze. Z pewnością jestem teraz zdezorientowany ... –
Czy podobna odpowiedź nie jest zgodna z twoją intencją? @ X.Amanda – snr