zoukankan      html  css  js  c++  java
  • java实现二叉树

    package ds.tree;
    /**
     * 使用二叉链表实现二叉树。
     */
    public class BinaryTree<T> {
        /**
         * 结点类。
         */
        class Node {
            int value; // 该节点存储的值。
            Node leftChild; // 指向左子节点的引用。
            Node rightChild; // 指向右子节点的引用。
            Node(int value) {
                this.value = value;
                leftChild = null;
                rightChild = null;
            }
        }
        private Node root; // 根节点。
        /**
         * 无参构造方法。
         */
        BinaryTree() {
            root = null;
        }
        /**
         * 使用一个数组来构造二叉树。
         * @param arr 值的数组。
         */
        BinaryTree(int[] arr) {
            for (int i : arr) {
                insert(i);
            }
        }
        private void insert(int value) {
            root = insert(root, value);
        }
        /**
         * 将数值插入到二叉树中,比当前结点小或等于当前结点的插在当前结点的左侧,
         * 比当前结点大的数插在当前结点的右侧,每次从根结点开始递归比较。
         * @param node 当前的结点,就是根结点,只是每次根结点的左右子孙更新。
         * @param value 要插入的值。
         * @return 插值结束后的树的根节点。
         */
        private Node insert(Node node, int value) {
            if (node == null) {
                node = new Node(value);
            } else {
                if (value <= node.value) {
                    node.leftChild = insert(node.leftChild, value);
                } else {
                    node.rightChild = insert(node.rightChild, value);
                }
            }
            return node;
        }
        /**
         * 访问节点:将节点的值取出来并打印。
         * @param node 需访问的节点。
         */
        private void visit(Node node) {
            /**
             * 当节点为空时返回。
             */
            if (node == null) {
                return;
            }
            
            int value = node.value;
            System.out.println(value);
        }
        /**
         * 从指定节点作为根节点开始递归对树进行先序遍历。
         * @param node 指定节点。
         */
        private void preOrderTravels(Node node) {
            if (node == null) {
                return;
            } else {
                visit(node);
                preOrderTravels(node.leftChild);
                preOrderTravels(node.rightChild);
            }
        }
        /**
         * 从根节点开始对整个树进行先序遍历。
         */
        public void preOrderTravels() {
            preOrderTravels(root);
        }
    }
    package ds.tree;
    
    
    public class Test {
        public static void main(String[] args) {
            int arr[] = {12,33,79,1,11,56};
            BinaryTree tree = new BinaryTree(arr);
            tree.preOrderTravels();
        }
    }
  • 相关阅读:
    钢镚儿冲刺一周期第七天
    代码大全(第二版)阅读笔记01
    组队开发——地铁路线查询
    学习进度——第五周
    学习进度——第四周
    返回一个整数数组中最大子数组的和(文件)
    学习进度——第三周
    返回一个整数数组中最大子数组的和
    自我介绍
    学习进度——第二周
  • 原文地址:https://www.cnblogs.com/vincent4code/p/4906833.html
Copyright © 2011-2022 走看看