参考链接:https://www.cnblogs.com/yaobolove/p/6213936.html
这有一棵树:
1、节点对象
package com.tree.mybinarytree;
/**
* 二叉树TreeNode,每个node代表树中的一个节点
* @author ZX
* @date 2018年7月
*/
public class Node {
//左边子节点
private Node leftNode;
//右边子节点
private Node rightNode;
//节点数据
private String data;
//getset
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
//constructor
public Node() {}
public Node(Node leftNode,Node rightNode,String data) {
this.leftNode=leftNode;
this.rightNode=rightNode;
this.data=data;
}
}
2、测试类
package com.tree.mybinarytree;
/**
* 1、组装树 2、遍历树 3、测试
*
* @author zx
*
*/
public class TreeTest {
public static void main(String[] args) {
//按照图片组装树
Node G = new Node(null, null, "G");
Node F = new Node(null, null, "F");
Node E = new Node(null, null, "E");
Node D = new Node(null, null, "D");
Node C = new Node(F, G, "C");
Node B = new Node(D, E, "B");
Node A = new Node(B, C, "A");
//遍历
System.out.println("先序遍历");
theFirstTraversal(A);
System.out.println("");
System.out.println("中序遍历");
theInOrderTraversal(A);
System.out.println("");
System.out.println("后序遍历");
thePostOrderTraversal(A);
System.out.println("");
}
public static void printNode(Node node) {
System.out.print(node.getData());
}
/**
* 先序遍历
* @param root
*/
public static void theFirstTraversal(Node root) { // 先序遍历
printNode(root);
if (root.getLeftNode() != null) { // 使用递归进行遍历左孩子
theFirstTraversal(root.getLeftNode());
}
if (root.getRightNode() != null) { // 递归遍历右孩子
theFirstTraversal(root.getRightNode());
}
}
/**
* 中序遍历
* @param root
*/
public static void theInOrderTraversal(Node root) { // 中序遍历
if (root.getLeftNode() != null) {
theInOrderTraversal(root.getLeftNode());
}
printNode(root);
if (root.getRightNode() != null) {
theInOrderTraversal(root.getRightNode());
}
}
/**
* 后序遍历
* @param root
*/
public static void thePostOrderTraversal(Node root) { // 后序遍历
if (root.getLeftNode() != null) {
thePostOrderTraversal(root.getLeftNode());
}
if (root.getRightNode() != null) {
thePostOrderTraversal(root.getRightNode());
}
printNode(root);
}
}
由于二叉查找树可以任意构造,同样的值,可以构造出很少分支的二叉查找树,显然这棵二叉树的查询效率和顺序查找差不多。若想二叉查找数的查询性能最高,需要这棵二叉查找树是平衡的,也即平衡二叉树(AVL树)