二叉搜索树01

二叉搜索树的定义是:

1: 左子树的节点值必须小于根节点的值
2:右子树的节点值必须大于根节点的值
这一规则适用于二叉查找树中的每一个节点

普通数组构建BST

因为每一个节点的值都会事先与根节点进行比较,小于根节点的在左边,大于的在右边,左右子树一样

所以,我们首先取数组的第一个值,作为根节点,然后剩下的值依次遍历插入。

主要是要理解递归,当运行到某一个节点的时候,会先去运行他的左右子节点是否存在,然后再回退到他自身。

代码:

public static BSTNode createBSTByArr(int[] arr){
        BSTNode bstNode=new BSTNode(arr[0]);
        if(arr!=null && arr.length!=0){
            int length = arr.length;
            for (int i = 1; i < length; i++) {
                eachCreateBst(bstNode,arr[i]);
//              eachCeateBst2(bstNode,arr[i]);
            }
        }
        return bstNode;
    }
private static void eachCreateBst(BSTNode bstNode, int value) {
        if(value>bstNode.getData()){
            if(null==bstNode.getRightNode()){
                BSTNode rightNode=new BSTNode(value);
                bstNode.setRightNode(rightNode);
            }else{
                eachCreateBst(bstNode.getRightNode(),value);
            }
        }else{
            if(null==bstNode.getLeftNode()){
                BSTNode leftNode=new BSTNode(value);
                bstNode.setLeftNode(leftNode);
            }else{
                eachCreateBst(bstNode.getLeftNode(),value);
            }
        }
    }

代码里面:

首先会判断值是否大于根的值,如果大于,先判断当前的右边节点是否存在,如果不存在,就把传入的值创建为一个节点。如果存在,就开始递归去判断。同理,左边也是如此。

重点在理解递归,eachCreateBst

如果当前值大,就判断右节点是否存在,如果存在,就创建右节点,并设置
如果不存在,就递归去创建,假设递归中存在了,设置了,还是会回溯到上一步递归创建的哪行代码上的。

这个递归终止的逻辑就是set节点完结。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容