[英]Find a node in an AVL tree iteratively
有人知道如何迭代搜索AVL樹中的特定節點嗎? 我的意思是,由於樹的高度復雜。 我寫了一些代碼,但實際上我不知道如何迭代搜索節點(遞歸不會有問題):
public class AuDTree<E extends Comparable<? super E>> implements AuDTreeInterface<E> {
private class Node{
public Node left;
public Node right;
public Node parent;
public E value;
public Node(E value){
left = null;
right = null;
parent = null;
this.value = value;
}
}
public Node root;
public AuDTree(){
this.root = null;
}
@Override
public boolean isEmpty() {
if(root == null){
return true;
}
else{
return false;
}
}
@Override
public int count() {
return count(root);
}
private int count(Node n) {
if (n == null) {
return 0;
}
if (n.left == null && n.right == null) {
return 1;
} else {
return count(n.left) + count(n.right);
}
}
@Override
public int getHeight() {
return getHeight(root);
}
private int getHeight(Node n) {
if (n == null) {
return -1;
}
return Math.max(getHeight(n.left), getHeight(n.right)) + 1;
}
@Override
public boolean isAVLTree() {
return isAVLTree(root);
}
public boolean isAVLTree(Node n){
Node prev = null;
if(root == null)
{
if(!isAVLTree(root.left))
return false;
if(prev != null && root.value.compareTo(prev.value) <= 0)
return false;
prev = root;
return isAVLTree(root.right);
}
return true;
}
@Override
public boolean contains(E value) {
if(isEmpty()) return false;
else if(value == root) return true;
else{
在此先感謝:)
AVL樹只是一種特殊的二進制搜索樹,您可以用相同的方式搜索它 :
我們首先檢查根節點。 如果樹為空,則我們要搜索的鍵在樹中不存在。 否則,如果鍵等於根的鍵,則搜索成功,並且我們返回節點。 如果鍵小於根的鍵,則搜索左子樹。 同樣,如果鍵大於根的鍵,則搜索正確的子樹。 重復此過程,直到找到密鑰或其余子樹為空。 如果在到達空子樹之前未找到搜索到的密鑰,則該樹中不存在該密鑰。
對於您的實現,它看起來像這樣:
public boolean contains(E value) {
Node current = root;
while (current != null) {
int comparison = value.compareTo(current.value);
if (comparison == 0) {
return true;
} else if (comparison < 0) {
current = current.left;
} else { //comparison > 0
current = current.right;
}
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.