我試圖快速實現Java中的二叉搜索樹。什麼是最好的類使用,有順序遍歷的方法? (我聽說過TreeMap類,但它看起來像類不包含任何方法來按順序遍歷)。二叉搜索樹和中序遍歷
回答
使用LinkedHashMap的遍歷廣告訂單或TreeMap的比較順序 http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html
Culd你告訴我更多的比較順序? – mountain5
通過比較鍵來排序鍵 - 使用鍵的類的compareTo方法 - 或者可以在地圖創建時間上指定比較器 – user2088476
這是一個絕妙的想法。非常感謝。 – mountain5
我不認爲任何標準庫可用於這個穿越。檢查此鏈接的示例實現http://www.java-tips.org/java-se-tips/java.lang/binary-search-tree-implementation-in-java.html
謝謝你的鏈接。我將來肯定會需要它。由於我正在進行一個項目,所以我決定實施user2088476的建議。 – mountain5
您可以隨時創建自己的類並使用該類實現算法。
public class Node {
Node leftChild;
Node rightChild;
int parent;
Node(int parent) {
this.parent = parent;
}
}
然後實現Binary Search Tree類。這個過程非常快,但它是給你一個想法。
public class BSTree {
Node root;
BSTree() {
root = null;
}
public void insert(Node node, int value) {
if (value >= node.parent) {
if (!(node.rightChild == null)) {
insert(node.rightChild, value);
} else {
node.rightChild = new Node(value);
}
} else if (value < node.parent) {
if (!(node.leftChild == null)) {
insert(node.leftChild, value);
} else {
node.leftChild = new Node(value);
}
} else {
root = new Node(value);
}
}
public boolean delete(Node node, int value) {
if (root == null) {
return false;
} else if (value > root.parent) {
return delete(root.rightChild, value);
} else if (value < root.parent) {
return delete(root.leftChild, value);
} else {
if (root.leftChild == null && root.rightChild == null) {
root = null;
return true;
} else if (root.leftChild == null && root.rightChild != null) {
root = root.rightChild;
return true;
} else if (root.leftChild != null && root.rightChild == null) {
root = root.leftChild;
return true;
} else {
Node minRight = minNode(root.rightChild);
root = minRight;
delete(minRight, minRight.parent);
return true;
}
}
}
public Node minNode(Node node) {
if (node.leftChild == null) {
return node;
} else {
return minNode(node.leftChild);
}
}
}
TreeSet類可能是你想要什麼
class Node implements Comparable<Node>; // implements your Node class
TreeSet<Node> set = new TreeSet<Node>();
// after adding a bunch of nodes into set
Iterator<Node> it = set.iterator();
while(it.hasNext()){
Node current = it.next();
System.out.println(current); // operate on current node
}
Node first = set.first(); // smallest element in set
Node second = set.ceiling(first); // the successor method
- 1. 二叉搜索樹遍歷
- 2. 遍歷二叉搜索樹
- 3. 二叉搜索樹遍歷
- 4. 遍歷二叉搜索樹
- 5. 二叉搜索樹 - 中序遍歷
- 6. 程序集:遍歷二叉搜索樹
- 7. 二叉搜索樹遍歷 - 預購
- 8. 遍歷二叉搜索樹Python
- 9. PHP二叉搜索樹,如何遍歷
- 10. 二叉搜索樹給定樹的前,後,後順序遍歷
- 11. 二叉樹遍歷
- 12. 二叉樹遍歷
- 13. 遍歷二叉樹
- 14. 遍歷二叉樹
- 15. 使用遞歸進行序列遍歷 - 二叉搜索樹C++
- 16. 通過二叉搜索樹遍歷來查找所有樹葉
- 17. 使用堆棧的二叉搜索樹的樹遍歷算法
- 18. 在遍歷二叉搜索樹的過程中,代碼中哪裏遍歷?
- 19. 二叉樹級別遍歷
- 20. 二叉樹遍歷抽象
- 21. 爲了遍歷二叉樹
- 22. 遍歷非二叉樹
- 23. Javascript:遍歷二叉樹?
- 24. 二叉樹級別遍歷
- 25. SQL二叉樹遍歷
- 26. 遞歸遍歷二叉樹
- 27. 在樹中遍歷二叉樹C
- 28. 遍歷一個無序的二叉樹
- 29. 二叉樹序列遍歷球拍
- 30. 二叉樹的水平順序遍歷
也看到了這個問題:http://stackoverflow.com/q/205945/2170192 –