树(二)

                                               树的基本操作:插入、查找

插入

  • 从根节点开始查找,这个节点将成为新插入节点的父节点,父节点找到后,判断新节点的值比父节点的值得大小判断连接到左子节点还是右子节点

查找

  • 从根节点开始查找,如果查找的节点值比当前节点值小,则继续查找左子节点否则查找右子节点

    //定义数据项及初始化

    /*
     * 二叉树节点
     */
    public class Node {
        //数据项
        public long data;
        //数据项
        public String sData;
        //左子节点
        public Node leftChild;
        //右子节点
        public Node rightChild;
        
        /**
         * 构造方法
         * @param data
         */
        public Node(long data,String sData) {
            this.data = data;
            this.sData = sData;
        }
        
    }

     

    //定义方法
    /*
     * 二叉树类
     */
    public class Tree {
        //根节点
        public Node root;
        
        /**
         * 插入节点
         * @param value
         */
        public void insert(long value,String sValue) {
            //封装节点
            Node newNode = new Node(value,sValue);
            //引用当前节点
            Node current = root;
            //引用父节点
            Node parent;
            //如果root为null,也就是第一插入的时候
            if(root == null) {
                root = newNode;
                return;
            } else {
                while(true) {
                    //父节点指向当前节点
                    parent = current;
                    //如果当前指向的节点数据比插入的要大,则向左走
                    if(current.data > value) {
                        current = current.leftChild;
                        if(current == null) {
                            parent.leftChild = newNode;
                            return;
                        }
                    } else {
                        current = current.rightChild;
                        if(current == null) {
                            parent.rightChild = newNode;
                            return;
                        }
                    }
                }
            }
        }
        
        /**
         * 查找节点
         * @param value
         */
        public Node find(long value) {
            //引用当前节点,从根节点开始
            Node current = root;
            //循环,只要查找值不等于当前节点的数据项
            while(current.data != value) {
                //进行比较,比较查找值和当前节点的大小
                if(current.data > value) {
                    current = current.leftChild;
                } else {
                    current = current.rightChild;
                }
                //如果查找不到
                if(current == null) {
                    return null;
                }
            }
            return current;
        }
        
        /**
         * 删除节点
         * @param value
         */
        public void delte(long value) {
            
        }
        
    }

     

测试

 

public class TestTree {
    public static void main(String[] args) {
        Tree tree = new Tree();
        tree.insert(10,"James");
        tree.insert(20,"YAO");
        tree.insert(15,"Kobi");
        tree.insert(3,"Mac");
        
        System.out.println(tree.root.data);
        System.out.println(tree.root.rightChild.data);
        System.out.println(tree.root.rightChild.leftChild.data);
        System.out.println(tree.root.leftChild.data);
        
        Node node = tree.find(3);
        System.out.println(node.data + ", " + node.sData);
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值