算法
想记录一些自己学习前端常用的算法,例如各种数组处理,二叉树遍历,动态规划等
前端陈平安
你最好觉得我很菜,但是我希望你越来越强
展开
-
遍历二叉树递归与迭代汇总,套路就是这么简单
递归与迭代的稍讲解递归递归,先递进再归来。要做递归现在清楚递归每一步要做什么,以及递归的终止条件和入口参数。迭代的前提要清楚你要遍历的实体的结构,然后在遍历每一个点,在二叉树的迭代遍历中,迭代模仿了递归的工作方式,用栈存储了每个结点,直到将叶子结点进栈之后,才不断出栈,然后访问结点。二叉树前序遍历递归实现存在子结点,就调用自身往下一层,不存在返回空。var preorderTraversal = function(root) { let result = []; function原创 2021-05-28 16:27:51 · 126 阅读 · 0 评论 -
leetcode 路径总和
题目:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。leetcode原题链接思路: 从上往下记录每一层每个结点累加的路径值,如果他是叶子结点,且符合条件则返回。遍历完所有结点,没有就false结束。function hasPathSum(root, targetSum) { if (!root) { return false; }原创 2021-05-20 18:32:22 · 72 阅读 · 0 评论 -
leetcode 判断平衡二叉树
题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。leetcode原题链接思路:每一步都判断他是否是高度平衡的,如果不是返回-1,如果是树的深度。function isBalanced(root) { return height(root) >= 0; function height(root) { if (!root) { return原创 2021-05-20 18:27:58 · 126 阅读 · 0 评论 -
求二叉树最小深度
跟之前写的求最大深度差不多,这里通过递归和遍历的方式实现。递归思路:每次还是比较左右子树的深度,并返回最小深度。function minDeep(root) { if (!root) { return 0; } const leftDeep = minDeep(root.left); const rightDeep = minDeep(root.right); const min = Math.min(leftDeep, rightDeep);原创 2021-05-19 10:12:57 · 364 阅读 · 0 评论 -
JS leetcode求二叉树的最大深度
递归实现思路:遍历左右结点获取深度,没下一层深度加1。function BTMaxDeep(root) { if (!root) { return 0; } let maxLeft = BTMaxDeep(root.left); let maxRight = BTMaxDeep(root.right); const max = Math.max(maxLeft, maxRight); return max + 1;}迭代实现广度优先原创 2021-05-17 10:20:19 · 786 阅读 · 0 评论 -
生成二叉树
树结点构造函数const TreeNode = function (val, left, right) { this.val = (val === undefined ? 0 : val); this.left = (left === undefined ? null : left); this.right = (right === undefined ? null : right);}将有序数组转化为二叉搜索树思路:即递归思路,递归函数就是重复要做的事,要有出口(终止行为原创 2021-05-15 17:05:06 · 724 阅读 · 0 评论