您的位置:首页 > 其它

二叉查找树的实现(插入+递归调用)

2017-04-04 22:16 148 查看
package BinaryTree;

public class BinarySearchTree {

public TreeNode root;
public BinarySearchTree(){
//root=new TreeNode(1,"A");
//root=null;
}

private class TreeNode{
private int key;
private String data;
private TreeNode leftChild;
private TreeNode rightChild;

public TreeNode(int key,String data){
this.key=key;
this.data=data;
this.leftChild=null;
this.rightChild=null;
}
}
public TreeNode getTreeNode(int key,String data){
return new TreeNode(key,data);
}

private void insert(TreeNode node){
root=insert(root,node);
}
public TreeNode insert(TreeNode subTree,TreeNode node){
if(node==null){  //不可插入null
return null;
}
if(subTree==null){  //根节点为空,插入
subTree=node;
}else{
if(node.key<subTree.key){//比根节点小? 插左边
subTree.leftChild=insert(subTree.leftChild,node);
}else{ //否则,插右边
subTree.rightChild=insert(subTree.rightChild,node);
}
}
return subTree;
}
/**
* 前序遍历
*  先访问根节点,再分别访问其左、右子树
* @param subTree
*/
public void preOrder(){
preOrder(root);
}
private void preOrder(TreeNode subTree){
if(subTree!=null){
System.out.println("key:"+subTree.key+"--name:"+subTree.data);
preOrder(subTree.leftChild);
preOrder(subTree.rightChild);
}
}

/**
* 中序遍历
*  根节点的遍历在其左、右子树之间
* @param subTree
*/
public void inOrder(){
inOrder(root);
}
public void inOrder(TreeNode subTree){
if(subTree!=null){
inOrder(subTree.leftChild);
System.out.println("key:"+subTree.key+"--name:"+subTree.data);
inOrder(subTree.rightChild);
}
}
/**
* 后序遍历
* 访问根节点在遍历其左右子树之后
* @param subTree
*/
public void postOrder(){
postOrder(root);
}
public void postOrder(TreeNode subTree){
if(subTree!=null){
postOrder(subTree.leftChild);
postOrder(subTree.rightChild);
System.out.println("key:"+subTree.key+"--name:"+subTree.data);
}
}

public static void main(String[] args) {

BinarySearchTree bst=new BinarySearchTree();

bst.insert(bst.getTreeNode(4, "D"));
bst.insert(bst.getTreeNode(1, "A"));
bst.insert(bst.getTreeNode(2, "B"));
bst.insert(bst.getTreeNode(5, "E"));
bst.insert(bst.getTreeNode(3, "C"));

sop("前序遍历");
bst.preOrder();
sop("中序遍历:结果为从小到大");
bst.inOrder();
sop("后序遍历");
bst.postOrder();

}

public static void sop(Object o){
System.out.println(o);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: