zoukankan      html  css  js  c++  java
  • 浅析数据结构

     

    二叉树

      二叉树应用广泛,多种数据结构基于二叉树,如AVL平衡二叉树,红黑树。

      这次就复盘一下这个简单,同时又非常重要的数据结构。

     定义

      二叉树是一棵树

      二叉树的每个结点都最多有两个子结点:左子树,右子树

    二叉排序树

      二叉排序树是一颗二叉树

      二叉排序树的左孩子比父节点大,右孩子比父节点小

    二叉排序树的实现(Java)

    1.树的定义:

      我们定义一个二叉树类,继承Comparable以实现泛型对比

      在类中定义一个结点内部类Node<T>

      详细如下:

    //因为使用了泛型,需要继承Comparable类
    class BinaryTree<T extends Comparable<T>> {
        private Node<T> rootNode = null;
      // 节点
        class Node<T extends Comparable<T>> {
            // 左孩子
            Node<T> leftSon;
            // 右孩子
            Node<T> rightSon;
            // 父亲
            Node<T> parent;
            T key;
    Node() {}
    Node(T t) {
    this.key = t; } } }

     2.添加元素

        // 添加节点
        public void add(T t) {
            int result;
            Node<T> newNode = new Node<>(t);
            Node<T> target = null;
            Node<T> temp = this.rootNode;
            // 寻找对应父节点
            while (temp != null) {
                target = temp;
                result = temp.key.compareTo(t);
                if (result > 0) {
                    temp = temp.leftSon;
                }else{
                    temp = temp.rightSon;
                }
            }
            newNode.parent = target;
            // 判断当前树是否为空
            if(target!=null){
                result = target.key.compareTo(t);
                if(result > 0){
                    target.leftSon = newNode;
                }else{
                    target.rightSon = newNode;
                }
            }else{
                this.rootNode = newNode;
            }
        }

    3.遍历元素

        // 使用中序遍历
        public void doLDR(){
            inOrderTraverse1(rootNode);
        }
        // 中序遍历算法
        public void inOrderTraverse1(Node<T> root) { 
            if (root != null) {  
                inOrderTraverse1(root.leftSon);  
                System.out.print(root.key+"  ");  
                inOrderTraverse1(root.rightSon);  
            } 
        }
  • 相关阅读:
    【软件测试】软件缺陷粗浅认识及白盒测试举例
    【软件测试】等价类划分
    【软件测试】对本门课程粗浅理解
    阿里云服务器本地ping超时,远程可以正常ping通
    不忘初心
    开源框架、控件、组件、插件记录
    Flex中窗口可随意拖拽功能实现
    初探数据类型相关问题
    [TSCTF-J 2021] 解题报告
    指针
  • 原文地址:https://www.cnblogs.com/joe2047/p/10407752.html
Copyright © 2011-2022 走看看