每天进步一点点

2020-07-12【还是树】

2020-07-12  本文已影响0人  桢桢claire
最近特别喜欢海浪,希望他带给我力量

今日鸡汤

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

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

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

另外,注意一些临界条件,比如空树是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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读