查找二叉树

作者: hipeer | 来源:发表于2018-09-01 18:17 被阅读0次

假设一个数组{ 6, 3, 7, 2, 5, 1, 3, 9 },使用java语言来创建一个二叉搜索树

首先创建一个节点类

/**
 * 查找二叉树的节点
 *
 */
public class BSTNode {

    private int key;
    public int data;
    public BSTNode parent;
    public BSTNode lchild;
    public BSTNode rchild;

    public BSTNode(int data) {
        this.data = data;
    }

    public int getKey() {
        return key;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public BSTNode getParent() {
        return parent;
    }

    public void setParent(BSTNode parent) {
        this.parent = parent;
    }

    public BSTNode getLchild() {
        return lchild;
    }

    public void setLchild(BSTNode lchild) {
        this.lchild = lchild;
    }

    public BSTNode getRchild() {
        return rchild;
    }

    public void setRchild(BSTNode rchild) {
        this.rchild = rchild;
    }

}

创建查找二叉树

二叉树创建完成后,进行一次中序遍历,如果结果是有序的表示创建成功


/**
 * 构建二叉搜索树
 * 
 * { 6, 3, 7, 2, 5, 1, 3, 9 }
 *
 *                          6
 *               3                   7
 *       2             5                     9
 *1
 *遇到已存在的元素就不创建节点,上面这棵树就是要创建的二叉树,它的中序遍历结果为
 *  1 2 3 5 6 7 9       
 */
public class BSTree {

    public BSTNode root;

    public BSTNode putNode(int data) {
        BSTNode node = null;
        BSTNode parent = null;
        // 创建根节点
        if (root == null) {
            node = new BSTNode(data);
            root = node;
            return node;
        }
        // 从根节点开始遍历比较节点的data与新data的大小,遇到空节点结束
        node = root;                       // node是指针,开始时指向根节点
        while (isEmpty(node)) {
            parent = node;                 // 每到一个节点就记录该节点的父节点
            if (data > node.data) {        // 如果新data大于当前节点的data,就往右节点去比较
                node = node.rchild;     
            } else if (data < node.data) { // 如果新data小于当前节点的data,就往左节点去比较
                node = node.lchild;
            } else {
                return null;
            }
        }

        // 准备添加的新节点
        node = new BSTNode(data);    
        if(data > parent.data) {
            parent.rchild = node;
        }
        
        if(data < parent.data) {
            parent.lchild = node;
        }
        
        node.parent = parent;
        return node;
    }

    /**
     * 中序遍历
     */

    public void inOrder(BSTNode node) {
        if (node == null) {
            return;
        } else {
            inOrder(node.lchild);
            System.out.print(node.data + " ");
            inOrder(node.rchild);
        }
    }

    public boolean isEmpty(BSTNode node) {
        if (node != null) {
            return true;
        } else {
            return false;
        }
    }
    
    
    public static void main(String[] args) {
        BSTree bsTree = new BSTree();
        int[] arr = { 6, 3, 7, 2, 5, 1, 3, 9 };
        for(int x: arr) {
            bsTree.putNode(x);
        }
        bsTree.inOrder(bsTree.root);
    }
}

相关文章

  • 6. 二叉树创建-查找

    1. 递归方式实现二叉树的构建2. 树、二叉树、二叉查找树3. 二叉树排序树的理解4. 二叉查找树5. 二叉树的查找

  • 二叉树 堆 2019-04-17

    二叉树 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树...

  • 《数据结构与算法》知识点(四)

    第七章 查找 顺序查找、折半查找、索引查找、分块查找是静态查找,动态查找有二叉排序树查找,最优二叉树查找,键树查找...

  • 7天练|Day5:二叉树和堆

    关于二叉树和堆的7个必知必会的代码实现二叉树实现一个二叉查找树,并且支持插入、删除、查找操作实现查找二叉查找树中某...

  • 二叉查找树的查找和排序方法的实现

    定义二叉树 二叉查找树的查找和排序方法的实现

  • Kotlin 链式存储的二叉树中查找节点

    1. 查找方法 链式存储的二叉树中查找节点的方法可分为三种:前序查找、中序查找、后序查找,下面使用 Kotlin ...

  • 12-平衡二叉树

    平衡二叉树 平衡二叉树就是对二叉查找树的优化升级,它要求每个节点的左右子树的高度相差不大于1 1.平衡二叉树的查找...

  • 手写查找二叉树

    查找二叉树 随着大数据时代的来临,树形结构得到了越来越广泛的应用,废话不多说,直接开始我们的正题,查找二叉树。 何...

  • 2020-10-28

    快排 链表反转 链表反转 二叉树非递归实现 按层排序 二叉树深度 合并有序数组 二分查找 有序数组 查找 楼梯问题

  • 数据结构——二叉查找树(C语言)

    二叉查找树,也称作二叉搜索树,有序二叉树,排序二叉树,而当一棵空树或者具有下列性质的二叉树,就可以被定义为二叉查找...

网友评论

    本文标题:查找二叉树

    本文链接:https://www.haomeiwen.com/subject/gqpuwftx.html