当前位置: 首页 > wzjs >正文

视频模板一键生成seo官网

视频模板一键生成,seo官网,企业分类信息网,做电影网站会不会涉及版权问题算法思路(129) 前序遍历遵循“根节点、左子树、右子树”的顺序遍历二叉树的所有节点,常用于解决子节点状态依赖于父节点状态的问题。 算法思路: 在前序遍历的过程中,我们可以将信息从节点向左右子树传递&#xff0c…

算法思路(129)

前序遍历遵循“根节点、左子树、右子树”的顺序遍历二叉树的所有节点,常用于解决子节点状态依赖于父节点状态的问题。

算法思路:

在前序遍历的过程中,我们可以将信息从节点向左右子树传递,并在回溯时获取左右子树的返回值。递归函数实现了两个主要功能:

  1. 整合父节点的值与当前节点的信息,计算当前节点的数字,并将结果传递到下一层进行递归。
  2. 当遇到叶子节点时,不再向下传递信息,而是将整合后的结果向上回溯至根节点。

在递归结束后,根节点的返回值将更新为整棵树的数字和。

算法流程:

递归函数设计:int dfs(TreeNode* root, int num)

  • 返回值:当前子树的计算结果(数字和)。
  • 参数num  在递归过程中向下传递的父节点的数字信息。
  • 功能:整合父节点与当前节点的信息,计算当前节点的数字,并向下传递,同时在回溯时返回以当前节点为根的子树的数字和。

递归函数流程:

  1. 若当前节点为空,表示路径结束,返回0。
  2. 将父节点传递下来的信息与当前节点的值结合,计算当前节点的数字和 sum
  3. 如果当前节点是叶子节点,则直接返回整合后的结果 sum
  4. 如果当前节点不是叶子节点,将 sum 传递到左右子树,分别计算左右子树的数字和,并将结果相加后返回。

C++:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution 
{
public:int sumNumbers(TreeNode* root) {return dfs(root, 0);}int dfs(TreeNode* root, int presum){presum = presum * 10 + root->val;if(root->left == nullptr && root->right == nullptr)return presum;int ret = 0;if(root->left) ret += dfs(root->left, presum);if(root->right) ret += dfs(root->right, presum);return ret;}
};

Java:

/*** 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 int sumNumbers(TreeNode root) {return dfs(root, 0);}public int dfs(TreeNode root, int preSum){preSum = preSum * 10 + root.val;if(root.left == null && root.right == null)return preSum;int ret = 0;if(root.left != null) ret += dfs(root.left, preSum);if(root.right != null) ret += dfs(root.right, preSum);return ret;} 
}

算法思路(98)

如果一棵树是二叉搜索树(BST),那么它的中序遍历结果一定是一个严格递增的序列。因此,我们可以初始化一个全局变量 prev 用以记录中序遍历过程中的前驱节点。通过在中序遍历过程中判断当前节点与前驱节点的值是否构成递增序列,我们可以有效地验证树是否满足二叉搜索树的特性。

算法流程:

  1. 初始化一个全局变量 prev,用于记录中序遍历过程中前驱节点的值(初始值可以设为负无穷)。

  2. 中序遍历的递归函数流程如下:

    • 递归出口:当 root == nullptr 时,返回 true,表示空树是二叉搜索树。
    • 先递归检查左子树是否满足二叉搜索树的特性,结果存储在 retleft 中。
    • 然后检查当前节点是否满足二叉搜索树的性质,结果存储在 retcur 中:
      • 如果当前节点的值 val 大于 prev,则满足二叉搜索树的条件,将 retcur 标记为 true 并更新 prev 为当前节点的值。
      • 如果当前节点的值 val 小于或等于 prev,则不满足条件,将 retcur 标记为 false
    • 最后递归检查右子树是否满足二叉搜索树的特性,结果存储在 retright 中。
  3. 只有当 retleftretcur 和 retright 全部为 true 时,才能返回 true,说明当前树满足二叉搜索树的所有条件。

C++:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution 
{long prev = LONG_MIN;
public:bool isValidBST(TreeNode* root) {if(root == nullptr) return true;bool left = isValidBST(root->left);// 剪枝 if(left == false) return false;bool cur = false;if(root->val > prev)cur = true;// 剪枝 if(cur == false) return false;prev = root->val;bool right = isValidBST(root->right);return left && right && cur;}
};

Java:

/*** 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 
{long prev = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null) return true;boolean left = isValidBST(root.left);// 剪枝 if(left == false) return false;boolean cur = false;if(root.val > prev) cur = true;if(cur == false) return false;prev = root.val;boolean right = isValidBST(root.right);return left && cur && right;}
}

算法思路(230)

我们可以利用中序遍历的特性,只需扫描前 k 个节点便可找到目标。因此,我们可以创建一个全局计数器 count,初始化为 k,在每次遍历节点时将 count 减一。当 count 的值减至 1 时,表明当前节点就是我们要查找的结果。

算法流程:

  1. 定义一个全局变量 count,在主函数中初始化为 k(也可以作为参数传入递归)。

  2. 递归函数设计:int dfs(TreeNode* root)

    • 返回值为第 k 个节点。
  3. 递归函数流程(中序遍历):

    • 递归出口:如果当前节点为空,直接返回 -1,表示未找到。
    • 先递归遍历左子树查找结果,结果存储在 retleft 中:
      • 如果 retleft == -1,则表示在左子树中未找到,继续执行后续逻辑。
      • 如果 retleft != -1,则表示已找到第 k 个节点,直接返回结果,无需继续执行后续代码(进行剪枝)。
    • 如果左子树未找到,判断当前节点:
      • 如果当前节点是我们要找的目标(count == 1),则返回当前节点。
    • 如果当前节点不符合条件,则递归遍历右子树寻找结果。

C++:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution 
{int count;int ret;
public:int kthSmallest(TreeNode* root, int k) {count = k;dfs(root);return ret;}void dfs(TreeNode* root){if(root == nullptr || count == 0) return;dfs(root->left);count--;if(count == 0) ret = root->val;dfs(root->right);}};

Java:

/*** 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 count;int ret;public int kthSmallest(TreeNode root, int k) {count = k;dfs(root);return ret;}void dfs(TreeNode root){if(root == null || count == 0) return;dfs(root.left);count--;if(count == 0) ret = root.val;if(count == 0) return;dfs(root.right);}
}

http://www.dtcms.com/wzjs/352038.html

相关文章:

  • 杭州网站制作免费制作自己的网页
  • 沧州做网站哪家好如何在网上推广
  • 自己做网站的图片数据分析师证书
  • 给企业做网站多少钱app推广兼职是诈骗吗
  • 如何把网站做权重贵州百度seo整站优化
  • 网站建设经验大总结百度竞价推广价格
  • 俄语网站建设注意事项网络推广软件有哪些
  • 产品网站策划书方案合肥网站建设程序
  • 石家庄百度推广客服电话多少什么是seo什么是sem
  • 温州做美食网站有什么可以做推广的软件
  • 河南今天发生的重大新闻百度seo灰色词排名代发
  • 织梦做的网站图片路径在哪里上海搜索引擎优化1
  • 网站企业网站建设需求文档广州百度seo代理
  • 个人做免费网页怎么优化网站排名
  • 衡水移动网站建设引流推广怎么做
  • 做seo网站营销推广百度检索入口
  • 网站策划书主题竞价推广开户公司
  • 做一人网站要多少钱营销技巧和话术
  • 网站注册费网络营销总结及体会
  • 百度如何做网站百度指数分析数据
  • 哈尔滨营销型网站建设百度云网盘资源搜索引擎入口
  • 视频网站seo怎么做软服业营收破334亿
  • 深圳做网站的公司 cheungdom网络营销的概念和特点
  • 北京网站开开发公司网站开发建站
  • 山东建设厅网站是什么肇庆网站搜索排名
  • 做教育网站销售的好吗网络营销的推广方法
  • 建设传奇私服发布网站西安竞价托管代运营
  • 旅游网站开发背景百度推广怎么登陆
  • 上海城建建设官方网站今日头条十大新闻最新
  • 网站建设html新闻联播直播 今天