设为首页 加入收藏

TOP

Leetcode刷题第五周(六)
2023-07-25 21:36:30 】 浏览:89
Tags:Leetcode
gt;> pathSum(TreeNode root, int targetSum) { List<List<Integer>> result = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); if(root == null){ return result; } find(root, result, temp, targetSum); return result; } public void find(TreeNode root, List<List<Integer>> result, List<Integer> temp, int targetSum){ temp.add(root.val); if(root.left == null && root.right == null){ int sum = 0; for(int i = 0; i < temp.size(); i++){ sum += temp.get(i); } if(sum == targetSum){ result.add(new ArrayList<Integer>(temp)); } } if(root.left != null){ find(root.left, result, temp, targetSum); temp.remove(temp.size() - 1); } if(root.right != null){ find(root.right, result, temp, targetSum); temp.remove(temp.size() - 1); } } }

106、从中序与后序遍历序列构造二叉树

class Solution {
    public Map<Integer, Integer> map;
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        map = new HashMap<>();
        for(int i = 0; i < inorder.length; i++){
            map.put(inorder[i], i);
        }
        return find(inorder, 0, inorder.length, postorder, 0, postorder.length);
    }
    public TreeNode find(int[] inorder, int inbegin, int inend, int[] postorder, int pobegin, int poend){
        if(inbegin >= inend || pobegin >= poend){
            return null;
        }
        int temp = map.get(postorder[poend - 1]);
        int len = temp - inbegin;
        TreeNode root = new TreeNode(inorder[temp]);
        root.left = find(inorder, inbegin, temp, postorder, pobegin, pobegin + len);
        root.right = find(inorder, temp + 1, inend, postorder, pobegin + len, poend - 1);
        return root;
    }
}

105、从前序与中序遍历序列构造二叉树

class Solution {
    public Map<Integer, Integer> map;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        map = new HashMap<>();
        for(int i = 0; i < inorder.length; i++){
            map.put(inorder[i], i);
        }
        return find(inorder, 0, inorder.length, preorder, 0, preorder.length);
    }
    public TreeNode find(int[] inorder, int inbegin, int inend, int[] preorder, int prbegin, int prend){
        if(inbegin >= inend || prbegin >= prend){
            return null;
        }
        int temp = map.get(preorder[prbegin]);
        int len = temp - inbegin;
        TreeNode root = new TreeNode(inorder[temp]);
        root.left = find(inorder, inbegin, temp, preorder, prbegin + 1, prbegin + len + 1);
        root.right = find(inorder, temp + 1, inend, preorder, prbegin + len + 1, prend);
        return root;
    }
}

654、最大二叉树

class Solution {
    public Map<Integer, Integer> map;
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            map.put(nums[i], i);
        }
        return binaryTree(nums, 0, nums.length - 1);
    }
    public TreeNode binaryTree(int[] nums, int left, int right){
        int max = -1;
        for(int i = left; i <= right; i++){
            max = max > nums[i] ? max : nums[i];
        }
        if(max == -1){
            return null;
        }else{
            int index = map.get(max);
            TreeNode root = new TreeNode(max);
            root.left = binaryTree(nums, left, index - 1);
            root.right = binaryTree(nums, index + 1, right);
            return root;
        }
    }
}

617、合并二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode result = new TreeNode();
    public TreeNode mergeTrees(TreeNode root1, Tre
首页 上一页 3 4 5 6 7 8 9 下一页 尾页 6/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇每日算法之栈的压入、弹出序列 下一篇Spring Boot3.0升级,踩坑之旅,..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目