您的位置:首页 > 健康 > 美食 > 平面图设计软件app_软件开发主要工作内容_企业网络营销策划方案_培训心得体会范文大全1000

平面图设计软件app_软件开发主要工作内容_企业网络营销策划方案_培训心得体会范文大全1000

2025/3/17 17:03:37 来源:https://blog.csdn.net/2301_79232523/article/details/143794578  浏览:    关键词:平面图设计软件app_软件开发主要工作内容_企业网络营销策划方案_培训心得体会范文大全1000
平面图设计软件app_软件开发主要工作内容_企业网络营销策划方案_培训心得体会范文大全1000

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.从前序和中序遍历序列构造二叉树

题目链接:105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

题面:

基本分析:前序遍历数组中第一个是头结点,头结点在中序遍历数组中的位置为1,1之前的节点都属于头结点的左子树节点,1之后的节点都属于头结点的右子树节点,根据此规律递归下去

代码:

/*** 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 buildTree(int[] preorder, int[] inorder) {TreeNode root =  recursion(preorder,0,preorder.length-1,inorder,0,inorder.length-1);return root;}public TreeNode recursion(int[] preorder,int prestart,int preend, int[] inorder,int instart,int inend){if(prestart>preend)return null;int rootval = preorder[prestart];TreeNode root = new TreeNode(rootval);int index = 0;for(int i = instart;i<=inend;i++){if(inorder[i]==rootval){index = i;break;}}int leftnum = index - instart;root.left = recursion(preorder,prestart+1,prestart+leftnum,inorder,instart,instart+leftnum-1);root.right = recursion(preorder,prestart+leftnum+1,preend,inorder,instart+leftnum+1,inend);return root;}
}

2. 路径总和III

题目链接:437. 路径总和 III - 力扣(LeetCode)

题面:

基本分析:利用dfs暴力,力扣题解中也有大佬使用前缀和,推荐看一下

代码:

/*** 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 {int ans = 0;int targetSum;public int pathSum(TreeNode root, int targetSum) {if(root==null)return 0;this.targetSum=targetSum;recursion(root);return ans;}public void recursion(TreeNode root){if(root==null){return;}recursion2(root,root.val);recursion(root.left);recursion(root.right);}public void recursion2(TreeNode root,long val){if(val==targetSum)ans++;if(root.left!=null)recursion2(root.left,val+root.left.val);if(root.right!=null)recursion2(root.right,val+root.right.val);}
}

3.二叉树中的最大路径和

题目链接:124. 二叉树中的最大路径和 - 力扣(LeetCode)

题面:

基本分析:dp

代码:

/*** 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 {private int ans = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {dfs(root);return ans;}private int dfs(TreeNode node) {if (node == null) {return 0; // 没有节点,和为 0}int lVal = dfs(node.left); // 左子树最大链和int rVal = dfs(node.right); // 右子树最大链和ans = Math.max(ans, lVal + rVal + node.val); // 两条链拼成路径return Math.max(Math.max(lVal, rVal) + node.val, 0); // 当前子树最大链和(注意这里和 0 取最大值了)}
}

后言

上面是力扣Hot100的二叉树专题,下一篇是该专题的其他题目,希望有所帮助,一同进步,共勉!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com