二叉查找树的实现(插入+递归调用)
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); } }
相关文章推荐
- 二叉查找树带父节点指针的创建,销毁,查找,删除,插入,找前驱后继,找最小值最大值(递归和非递归的实现)
- 非递归实现二叉查找树插入操作
- 无意之中 实现了个两表互相调用插入触发器的代码
- (原创)用重载实现 treeview 的无限分类递归调用(图)
- BinarySearchTree(2)二叉查找树链式非递归实现
- C#插入排序☞递归实现
- 利用函数递归调用实现汉诺塔
- 递归调用实现的算法
- 二叉查找树的插入和删除简单实现
- AVL树非递归实现插入和删除例程
- 二叉搜索树的插入叶子结点的递归实现方法
- 递归调用实现目录树形结构
- 递归调用实现1到100的累加
- 用java实现的迭代和递归插入排序
- linux系统调用之文件:递归实现tree命令
- BinarySearchTree(1)二叉查找树链式递归实现
- (原创)用重载实现 treeview 的无限分类递归调用(图)
- linux系统调用之文件:递归实现pwd
- AVL树插入例程非递归实现C语言
- 统计输入中所有单词出现的次数(使用二叉查找树实现:递归和非递归)