美文网首页每天进步一点点
2020-07-12【还是树】

2020-07-12【还是树】

作者: 桢桢claire | 来源:发表于2020-07-12 13:22 被阅读0次
最近特别喜欢海浪,希望他带给我力量

今日鸡汤

在不甘心或者不愿意的状态下去做一件事情的时候,我们往往就会把这件事情无意识搞砸。

我始终相信,每件事情都有它合适的契机,与社会或他人无关,只与自己有关,当契机到来的时候,一切都会顺理成章。

今天继续来看树,一大早起来就处理了一个BST的问题——如何判断一棵满二叉树是否为二叉搜索树。
一些知识点:

  • 二叉搜索树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。(由这个性质可知,我们再判断左右孩子是不是BST树时,一定要传入老祖宗的值进行比较;另外,也可通过BST树的中序遍历是递增的这个性质来做。)
  • 满二叉树,除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树(由这个性质可知,我们可以通过下标来判断树的结构,即某个下标为i的节点,其左孩子下标为2n+1,右孩子下标为2n

另外,注意一些临界条件,比如空树是BST树。

由于输入是层次遍历的值,于是从手撕建树开始。

public class Main{
    public static String NULLNODE = "None";
    // Define tree node structure.
    public class TreeNode{
        int value = 0;
        TreeNode left = null;
        TreeNode right = null;
        public TreeNode(int val){
        value = val;
        }
    }
    
    public boolean isBST(TreeNode root, int min, int max){
        if(root == null)    return true;
        int rootVal = root.value;
        if(rootVal <= min || rootVal >= max){
            return false;
        } else{
            return isBST(root.left, min, rootVal ) && isBST(root.right, rootVal, max);
        }
    }
    
    public TreeNode createTree(ArrayList<String> levelTreeNodes, int rootIndex){
        int nodeSize = levelTreeNodes.size();
        if(rootIndex >= nodeSize) {
            return null;
        }
        // Create root node.
        String nodeValue = levelTreeNodes.get(rootIndex);
        // Check whether it is null.
        if(NULLNODE.equals(nodeValue)){
            return null;
        } else{
            TreeNode root = new TreeNode(Integer.parseInt(nodeValue));
            // Create left sub tree.
            int leftIndex = (rootIndex + 1) * 2 - 1;
            root.left = createTree(levelTreeNodes, leftIndex);        
            // Create right sub tree.
            int rightIndex = (rootIndex + 1) * 2;
            root.right = createTree(levelTreeNodes, rightIndex);

            return root;
        }
    }
    
    public static void main(String[] args){
        ArrayList<String> nodes = new ArrayList<String>();
       
        Scanner sc = new Scanner(System.in);
        String inputLine = null;
        if(sc.hasNextLine()) {
            inputLine = sc.nextLine();
        }
        String[] node = inputLine.split(",");
        for(String str: node) {
            nodes.add(str);
        }
        Main main = new Main();
        TreeNode tree = main.createTree(nodes, 0);
        if(main.isBST(tree, 0, Integer.MAX_VALUE)){
            System.out.print("True");
        } else{
            System.out.print("False");
        }
        sc.close();
    }
}

相关文章

  • 2020-07-12【还是树】

    今日鸡汤 在不甘心或者不愿意的状态下去做一件事情的时候,我们往往就会把这件事情无意识搞砸。 我始终相信,每件事情都...

  • 【周总结】第九期第09周07号-醒

    2020-07-12 【本周计划/总结】 一、职业发展 最近总是下雨,没有出去运动,感觉缺少了点什么 运动还是要跟...

  • Cannot copy to a TensorFlowLite

    2020-07-12 18:03:05.160 14845-14883/? E/AndroidRuntime: F...

  • GEO数据库-ID转换系列

    作者:jzhang Update:2020-07-12 Emali:jzhang910@qq.com 前言:我们都...

  • 树还是树,你还是你

    如果路走不到尽头就好了。 路灯也是氤氲着燃烧,腾开的雾气像黑夜的影子,冰冰凉凉的,猛吸一口还会酸了鼻子。 然后掉下...

  • 山还是山,树还是树。

    因果网。 影响,成就当下的你。 解脱, 从因上解。 你的情绪, 全有源头。 你要看清他们, 直视他们, 包容他们。...

  • 【D199】回到当下——写作营共读打卡第166天《当下的力量》阅

    2020-07-12,周日,阴 今天阅读《当下的力量》第四章。 Day166《回到当下》 ——写作营第166天共读...

  • 楮树还是构树?

    文/安垒 农历2月15到3月15,鹿邑县逢庙会,纪念老子诞辰2590周年。 今日,有幸去太清宫一游,也算赶了一次庙...

  • 还是那棵树

    日更第116天 之前写过一篇文章,写了公园里的一棵树,回顾点这里https://www.jianshu.com/p...

  • 2022-02-19

    风来过了,树还是树 雨来过了,树还是树 只有鸟来了, 树就不再是树, 树就有了家的感觉。 —— 《墨点》

网友评论

    本文标题:2020-07-12【还是树】

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