• java二叉树排序实现


    原创:转载请注明出处

    目的:想用java实现二叉树排序算法

    思想:利用java中面向对象的思想,即:

      Tree:类

      树根Tree:root    //static所属于每一个Tree

      左节点Tree:leftSon

      右节点Tree:rightSon

      父亲节点Tree:father

    上代码 Tree类:

    package com.cissst.dom1;
    
    /**
     * 二叉树
     * @author phoebe
     */
    public class Tree {
        public Integer data;//每一个节点的值
        public static Tree root;//根节点(有且仅有一个)
        public Tree father;//父节点
        public Tree leftSon;//左子节点
        public Tree rightSon;//右子节点
        
        //左树是否为空
        public boolean hasLeftSon(){
            return leftSon!=null;
        }
        //右树是否为空
        public boolean hasRightSon(){
            return rightSon!=null;
        }
        
        //插入节点
        public void insert(Integer data,Tree father){
            /**
             * 思想:先让data和root中的值进行比较,大于0插入右边,小于0插入左边,计划使用递归思想
             */
            //等于root.data
            if(data.compareTo(father.data)==0){
                return;
            }
            //大于root.data
            if(data.compareTo(father.data)>0){
                //父节点没有右节点
                if(!father.hasRightSon()){
                    father.rightSon = new Tree();//生成一个右节点
                    father.rightSon.data=data;//给右节点赋值
                    father.rightSon.father=father;//指定右节点的父亲是谁
                }else{
                    insert(data,father.rightSon);
                }
            }
            
            //小于同上
            if(data.compareTo(father.data)<0){
                //父节点没有左节点
                if(!father.hasLeftSon()){
                    father.leftSon = new Tree();//生成一个右节点
                    father.leftSon.data=data;//给右节点赋值
                    father.leftSon.father=father;//指定右节点的父亲是谁
                }else{
                    insert(data,father.leftSon);
                }
            }
        }
        
        /**
         * 总体插入操作
         * 1.判断是否有树根,没有的话将数据添加到树根里
         * 2.有树根调用insert的重载方法,判断插入到左son还是右son
         * @param data
         */
        public void insert(Integer data){
            if(root==null){
                root = new Tree();
                root.data=data;
                return;
            }else{
                insert(data,root);
            }
        }
        
        
    }

    测试代码:

    package com.cissst.dom1;
    
    /**
     * 树测试代码
     * @author phoebe
     */
    public class TreeTest {
        public static void main(String[] args) {
            TreeTest tt = new TreeTest();
            Tree tree = new Tree();
            tree.insert(5);
            tree.insert(2);
            tree.insert(3);
            tree.insert(1);
            tree.insert(8);
            tree.insert(3);
            tt.outPutTree(tree.root);
            tt.getMinValue(tree.root);
            tt.getMaxValue(tree.root);
        }
        //遍历树中的集合
        public void outPutTree(Tree tree){
            System.out.print(tree.data+" ");
            if(tree.hasLeftSon()){
                outPutTree(tree.leftSon);
            }
            if(tree.hasRightSon()){
                outPutTree(tree.rightSon);
            }
        }
        //找出树中最小的值
        public void getMinValue(Tree tree){
            if(tree.hasLeftSon()){
                getMinValue(tree.leftSon);
            }else{
                System.out.println("最小值"+tree.data);
            }
        }
    
        //找出树中最大的值
        public void getMaxValue(Tree tree){
            if(tree.hasRightSon()){
                getMaxValue(tree.rightSon);
            }else{
                System.out.println("最大值"+tree.data);
            }
        }    
        
    }
    Best Regards
  • 相关阅读:
    联盟自助服务
    联盟防沉迷验证
    联盟用户协议
    联盟常见问题2
    数据结构实验之链表五:单链表的拆分
    数据结构实验之链表四:有序链表的归并
    数据结构实验之链表三:链表的逆置
    数据结构实验之链表七:单链表中重复元素的删除
    师--链表的结点插入
    数据结构实验之链表二:逆序建立链表
  • 原文地址:https://www.cnblogs.com/pecool/p/8046295.html
Copyright © 2020-2023  润新知