Java 实现二叉树排序和查找

啥都不说了,直接上代码

package com.inter.structure;

import java.util.Random;

/**
 * 使用Java实现二叉树排序 二叉树只有一个根节点
 * 
 * @author Hua
 * 
 */
public class HuaBinaryTree {

    // 二叉树的根
    private Node root;

    // 添加数据
    private void add(int data) {
        if (root != null) {
            // 如果根已经创建,就调用元素的添加方法
            root.add(data);
        } else {
            root = new Node(data);
        }
    }

    // 输出二叉树的数值
    private void print() {
        root.printNode();
    }

    // 查找二叉树
    private boolean find(int data) {
        return root.find(data);
    }

    /**
     * 测试
     */
    public static void main(String[] args) {
        HuaBinaryTree root = new HuaBinaryTree();

        // 我们生成50个随机数,然后保存在二叉树中
        int[] intArray = new int[50];
        for (int i = 0; i < intArray.length; i++) {
            // 返回一个大于等于0小于n的随机数
            int temp = new Random().nextInt(100);
            intArray[i] = temp;
            root.add(temp);
        }

        System.out.println("要查找的数组元素是:" + intArray[20]);
        root.find(intArray[20]);
        root.print();
    }

    /**
     * 元素类
     * 
     * @author Hua
     * 
     */
    class Node {
        private int data;
        private Node left;// 左子树
        private Node right;// 右子树

        public Node(int data) {
            this.data = data;
        }
        // 添加元素
        public void add(int data) {
            // 如果根大于传递进来的数值
            if (this.data > data) {
                if (this.left == null) {
                    left = new Node(data);
                } else {
                    // 如果左子树有数值了,就进行递归,继续往左边找
                    left.add(data);
                }
            } else {
                if (this.right == null) {
                    right = new Node(data);
                } else {
                    right.add(data);
                }
            }
        }

        // 中序输出二叉树
        private void printNode() {
            System.out.print("排序后的二叉树:");
            if (this.left != null) {
                // 递归调用,直到找到最左边的数值(即最小数值)
                this.left.printNode();
            }
            System.out.print(this.data + ",");
            if (this.right != null) {
                this.right.printNode();
            }
        }

        // 查找指定元素
        public boolean find(int data) {
            System.out.println("happen " + this.data);
            // 如果找到了这个数值,就返回true
            if (data == this.data) {
                return true;
            } else if (data > this.data) {
                // 要找的数值比较大,就往右找
                if (right == null) {// 找到了最后边,返回false
                    return false;
                }
                return right.find(data);
            } else {
                if (left == null) {// 找到了最左边
                    return false;
                }
                return left.find(data);
            }
        }
    }
}
    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/limenghua9112/article/details/21388637
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞