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

网站 功能需求百度手机app

网站 功能需求,百度手机app,自己做头像网站,网站备案要拍照大家怎么做的啊图论入门【数据结构基础】:什么是树?如何表示树? 之前我们有分别讲解二叉树的三种遍历的相关代码实现: ⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C实现)Binary Tree Preorder Traversal ⭐算法OJ⭐二叉树的…

图论入门【数据结构基础】:什么是树?如何表示树?

之前我们有分别讲解二叉树的三种遍历的相关代码实现:
⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C++实现)Binary Tree Preorder Traversal
⭐算法OJ⭐二叉树的中序遍历【树的遍历】(C++实现)Binary Tree Inorder Traversal
⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal

二叉树的三种遍历【树的遍历】(C++实现)Binary Tree Traversal

二叉搜索树(BST)有一个非常重要的性质:中序遍历的结果是一个严格递增的序列。 如果对一棵二叉搜索树进行中序遍历(Inorder Traversal),得到的节点值的序列一定是从小到大严格递增的。

什么是中序遍历?

中序遍历是一种遍历二叉树的方式,顺序是:

  • 遍历左子树。
  • 访问根节点。
  • 遍历右子树。

为什么 BST 的中序遍历是严格递增的?

二叉搜索树的定义是:

  • 左子树的所有节点的值都小于根节点的值。
  • 右子树的所有节点的值都大于根节点的值。
  • 左右子树也必须是二叉搜索树。

根据这个定义,中序遍历的过程会先访问左子树(较小的值),然后访问根节点(中间的值),最后访问右子树(较大的值)。因此,遍历的结果一定是严格递增的。

举个例子

假设有一棵二叉搜索树:

      4/ \2   5/ \1   3

对这棵树进行中序遍历:

  • 遍历左子树 2:
    • 遍历左子树 1,访问 1。
    • 访问 2。
    • 遍历右子树 3,访问 3。
  • 访问根节点 4。
  • 遍历右子树 5,访问 5。
  • 最终的中序遍历结果是:[1, 2, 3, 4, 5],这是一个严格递增的序列。

如何利用这个性质?

我们可以利用中序遍历的结果来判断一棵树是否是二叉搜索树:

  • 对树进行中序遍历,记录遍历的结果。
  • 检查遍历结果是否是严格递增的。
    • 如果是,则说明这是一棵二叉搜索树。
    • 如果不是,则说明这不是一棵二叉搜索树。

98. Validate Binary Search Tree

Given the root of a binary tree, determine if it is a valid binary search tree (BST).

A valid BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.

A subtree of treeName is a tree consisting of a node in treeName and all of its descendants.

Example 1:
在这里插入图片描述

Input: root = [2,1,3]
Output: true

Example 2:
在这里插入图片描述

Input: root = [5,1,4,null,null,3,6]
Output: false
Explanation: The root node's value is 5 but its right child's value is 4.

C++ 实现

bool isValidBST(TreeNode* root) {vector<int> inorder;inorderTraversal(root, inorder); // 中序遍历for (int i = 1; i < inorder.size(); i++) {if (inorder[i] <= inorder[i-1]) { // 检查是否严格递增return false;}}return true;
}void inorderTraversal(TreeNode* node, vector<int>& result) {if (node == nullptr) return;inorderTraversal(node->left, result); // 遍历左子树result.push_back(node->val);         // 访问根节点inorderTraversal(node->right, result); // 遍历右子树
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的节点数,每个节点被访问一次。
  • 空间复杂度:
    • 递归解法: O ( n ) O(n) O(n),递归栈的深度。
    • 迭代解法: O ( n ) O(n) O(n),栈的空间。
http://www.dtcms.com/wzjs/35440.html

相关文章:

  • 宝塔面板怎么做网站营销推广费用预算表
  • 网站要去公安局备案吗营销比较好的知名公司有哪些
  • 锦州哪里做网站品牌营销推广策划方案
  • 菏泽财富中心网站建设网络营销的方式与手段
  • wordpress建站公司国外免费域名
  • 我公司是做网站开发的怎么纳税网络营销外包公司
  • 网站建设与设计大作业苏州关键词seo排名
  • 嘉定网站建设公司百度广告推广收费标准
  • 鹰潭手机网站建设seo自动优化工具
  • 优酷 做视频网站还能成功吗济南seo小黑seo
  • 沈阳百度网站排名百度推广点击一次多少钱
  • 自己做家具展示网站百度站长平台网址
  • 帮人家做家务的网站网络营销案例分析ppt
  • wordpress重新安装数据库小红书seo排名
  • 投标网站建设服务承诺购买链接怎么买
  • 动态网站建设毕业设计方案手机优化大师怎么退款
  • 静态网站怎么更新网店运营培训哪里好
  • 锦州网站优化开封网络推广公司
  • 网站维护更新费用东莞网站推广公司黄页
  • 厦门网站制windows优化大师是什么软件
  • 免费模板下载网站推荐免费网站怎么申请
  • 哪个网站可以做论文简述百度关键字搜索量查询
  • 网站左侧悬浮如何建立网站平台的步骤
  • 聊城建网站服务西安疫情最新消息1小时内
  • 搭建个人小型服务器百度sem优化师
  • 泗阳做网站的新手网络推广怎么干
  • 做服装批发的网站哪个比较好今天刚刚最新消息2023
  • 北京密云住房和城乡建设委员会网站谷歌seo排名工具
  • 都安网站建设南昌企业网站建设
  • 新手如何做网站的教程手机如何创建网站