首页 > 其他分享 >二叉搜索树 & 平衡树(c嘎嘎版)

二叉搜索树 & 平衡树(c嘎嘎版)

时间:2024-12-16 22:59:18浏览次数:10  
标签:TreeNode 嘎嘎 nullptr 二叉 搜索 root 节点

定义:

二叉搜索树是一种二叉树的树形数据结构,其定义如下:

  1. 空树是二叉搜索树。

  2. 若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。

  3. 若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。

  4. 二叉搜索树的左右子树均为二叉搜索树。

二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。对于一个有 N个结点的二叉搜索树中,这些操作的最优时间复杂度为O(logn) ,最坏为O(n) 。随机构造这样一棵二叉搜索树的期望高度为O(logn)  

二叉搜索树节点的定义:

struct TreeNode{
	int key;
	TreeNode*left;
	TreeNode*right;
	//维护其他信息,如高度,节点数量。
	int size;//当前节点为根的子树大小
	int count;// 当前节点的重复数量
	TreeNode(int value)
      : key(value), size(1), count(1), left(nullptr), right(nullptr) {} 
};

  

遍历二叉搜索树

由二叉搜索树的递归定义可得,二叉搜索树的中序遍历权值的序列为非降的序列。时间复杂度为O(n)

void inOrderTraversal(TreeNode * root) 
{
    // 1. 如果当前节点为空,直接返回
    if (root == nullptr) {
        return;
    }

    // 2. 递归遍历左子树
    inOrderTraversal(root->left);

    // 3. 访问当前节点
    cout << root->key << ' ';

    // 4. 递归遍历右子树
    inOrderTraversal(root->right);    
}

查找最小/最大值

由二叉搜索树的性质可得,二叉搜索树上的最小值为二叉搜索树左链的顶点,最大值为二叉搜索树右链的顶点。时间复杂度为O(h)

int findMin(TreeNode * root)
{
	if(root == nullptr) return -1;
	while(root ->left != nullptr) root = root ->left;
	
	return root ->key;
}
int findMax(TreeNode* root) {
  if (root == nullptr) {
    return -1;
  }
  while (root->right !&

标签:TreeNode,嘎嘎,nullptr,二叉,搜索,root,节点
From: https://blog.csdn.net/2302_79431881/article/details/144519514

相关文章

  • 二分搜索树节点的插入
    首先定义一个二分搜索树,Java代码表示如下:public class BST<Key extends Comparable<Key>,Value> {   //树中的节点为私有的类,外界不需要了解二分搜索树节点的具体实现   private class Node {     private Key key;     private......
  • 之字形打印二叉树 剑指offer
    题目描述       请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如,按之字形顺序打印下图二叉树的结果为:题目分析       按之字形顺序打印二叉树需要......
  • [提升你的应用:使用Bing Search API进行智能搜索]
    提升你的应用:使用BingSearchAPI进行智能搜索在当今的数字时代,搜索引擎已成为我们生活中不可或缺的一部分。BingSearchAPI提供了一种强大而灵活的方式,能够将Bing的搜索功能整合到您的应用程序中。本文旨在介绍如何使用BingSearchAPI来提升您的应用体验,以及如何解决常......
  • 谷歌搜索常用技巧总结
    以下是一些常用的谷歌搜索技巧,以表格形式列出:技巧描述示例引号搜索("")精确匹配搜索词组,确保结果中包含完全相同的词序列。"artificialintelligence"减号(-)排除搜索结果中包含特定词语的页面。apple-fruit星号(*)用作通配符,表示你不确定的词或词组。......
  • 搞定leetcode面试经典150题之二叉树
    系列博客目录文章目录系列博客目录基础知识1.二叉树的基本定义2.二叉树的性质3.二叉树的类型4.二叉树的遍历5.二叉树的实现6.常见的二叉树算法7.二叉树的应用总结例题104.二叉树的最大深度226.翻转二叉树101.对称二叉树100.相同的树102.二叉树的层序遍历98.验......
  • 带搜索过滤功能的jQuery国家地区选择下拉框插件
    nicecountryinput.js是一款带搜索过滤功能的jQuery国家地区选择下拉框插件。该下拉框插件通过简单的代码就可以实现所有国家和地区的选择下拉框,并且可以通过搜索框对国家地区名称进行搜索。 在线预览下载  使用方法在页面中引入jquery.min.js和niceCountryInput.js文件......
  • 搜索广告召回技术在美团的实践14
     美团搜索广告介绍从美团流量场景角度来看,美团搜索广告分为两大类,一是列表推荐广告;二是搜索广告。推荐广告以展现商家模式为主,通常叫商家流。搜索广告的展现形式比较丰富,有商家模式,即以商家展现为主,会挂上菜品/商品;还有商品模式,即以商品展现为主,以呈现商品大图、商品标题等核......
  • 二叉树常见题目2
    [Algo]二叉树常见题目21.最近公共祖先LCABinaryTreeNode*LCA(BinaryTreeNode*root,BinaryTreeNode*a,BinaryTreeNode*b){if(root==nullptr||root==a||root==b)returnroot;BinaryTreeNode*l=LCA(root->left,a,b),*r=LCA(root->right,a,......
  • 如何在PbootCMS中获取搜索页的关键词和搜索结果数量?
    在PbootCMS中,你可以通过特定的标签来获取搜索页的关键词和搜索结果的数量。以下是如何使用这些标签的详细说明和一些扩展建议:获取搜索关键词:在搜索页模板search.html中,使用标签{$get.keyword}来获取用户输入的搜索关键词。例如:html <h1>搜索结果:{$get.keyword}</h1>......
  • PbootCMS中如何获取并显示当前搜索内容?
    在PbootCMS中,获取并显示当前搜索内容是非常简单且直观的。你可以使用 {pboot:keyword} 标签来获取用户输入的搜索关键词,并将其显示在搜索结果页面上。这不仅有助于用户确认他们的搜索内容,还能提高用户体验。例如,假设你希望在搜索结果页面的顶部显示当前的搜索关键词,可以这样写:......