力扣654,617,700,98,打卡第二十天

今天的题目总体来说比较简单

654题:最大二叉树通过上次那个用两个递归的数组构造二叉树,今天这个题做的很容易,用先序遍历然后注意两个边界很容易做出了了

代码如下:

    public TreeNode constructMaximumBinaryTree(int[] nums) {
        int a = nums.length;
        return findNode(nums,0,a);

    }
    public TreeNode findNode(int[] nums,int begin,int end){
        int index = begin;
        for(int i=begin;i<end;i++){
            if(nums[i]>nums[index]){index=i;}
        }
        TreeNode node = new TreeNode(nums[index]);
        int leftbegin = begin;
        int leftend = index ;
        int rightbegin = index + 1;
        int rightend = end;
        if(leftend>leftbegin){
            node.left = findNode(nums,leftbegin,leftend);
        }
        if(rightend>rightbegin){
            node.right = findNode(nums,rightbegin,rightend);
        }
        return node;
    }

617题:合并二叉树

以一个二叉树为基础合并另一个二叉树,当同时有某个节点时返回合并值后的第一个树的节点,当只有一个树有这个节点时返回此节点,两个树同时向下遍历

代码如下:

    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1==null){return root2;}
        if(root2==null){return root1;}
        root1.val+=root2.val;
        root1.left = mergeTrees(root1.left,root2.left);
        root1.right = mergeTrees(root1.right,root2.right);
        return root1;
    }

700:二叉搜索树中的搜索

层序遍历的easy题;

代码如下:

    public TreeNode searchBST(TreeNode root, int val) {
        if(root==null){return null;}
        Queue<TreeNode> que = new ArrayDeque();
        que.add(root);
        while(!que.isEmpty()){
            TreeNode a = que.poll();
            if(a.val==val){return a;}
            if(a.left!=null){que.add(a.left);}
            if(a.right!=null){que.add(a.right);}
        }
        return null;

    }

98题:验证二叉搜索树

这里有一个技巧,也就是二叉搜索树的中序遍历是递增的,按照这个规律,层序遍历即可代码如下:

    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        Stack<TreeNode> stack = new Stack<>();
        TreeNode pre = null;
        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);
                root = root.left;// 左
            }
            // 中,处理
            TreeNode pop = stack.pop();
            if (pre != null && pop.val <= pre.val) {
                return false;
            }
            pre = pop;

            root = pop.right;// 右
        }
        return true;
    }


版权声明:本文为qq_44051051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。