码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构_树_二叉搜索树

时间:2018-10-31 23:22:16      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:二叉查找树   时间   ddn   arch   数据结构   中序   sea   找不到   void   

二叉搜索树

二叉搜索树(BST)又称为二叉查找树、二叉排序树。

1.特征

二叉搜索树首先是一棵二叉树;
对任意节点,如果其左子树不为空,则左子树上任意节点的值均不大于它的根节点的值;
如果其右子树不为空,则右子树上任意节点的值均不大于它的根节点的值;
任意节点的左右子树也分别是二叉搜索树。

2.中序遍历

中序遍历二叉搜索树,得到的结果是有序的数据列。

    // 中序遍历二叉搜索树,结果是排好序的数据
    public void midOrder(TreeNode node){
        if(node == null){
            return;
        }
        midOrder(node.getLeft());
        System.out.print(node.getKey() + " ");
        midOrder(node.getRight());
    }

3.添加节点

二叉搜索树添加的新节点总是成为叶子节点。

    // 添加节点构造二叉搜索树
    public TreeNode addNode(TreeNode node, int key){
        // 如果不存在则创建节点,否则直接返回
        if(node == null){
            node = new TreeNode(key);
        }
        if(key < node.getKey()){
            node.setLeft(addNode(node.getLeft(), key));
        }else if(key > node.getKey()){
            node.setRight(addNode(node.getRight(), key));
        }else{
            return node;
        }
        return node;
    }

4.查找节点

需要遍历二叉搜索树,时间复杂度取决于遍历的深度。

    // 查找某个节点,时间复杂度为走过的层数,最坏为O(H)
    public TreeNode searchNode(TreeNode node, int key){
        // 如果找不到返回null,找到则直接返回
        if(node == null || node.getKey() == key){
            return node;
        }else if(key < node.getKey()){
            return searchNode(node.getLeft(), key);
        }else{
            return searchNode(node.getRight(), key);
        }
    }

5.删除节点

数据结构_树_二叉搜索树

标签:二叉查找树   时间   ddn   arch   数据结构   中序   sea   找不到   void   

原文地址:https://www.cnblogs.com/pycrab/p/9886356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!