二叉搜索树二叉搜索树(BST,Binary Search Tree)又称为二叉排序树,空树也算
二叉搜索树有如下性质
若左子树不为空,则左子树上所有节点值小于根节点
若右子树不为空,则右子树上所有节点值大于根节点
左子树和右子树也都是二叉搜索树
例如
当然如果左大右小也可以
二叉搜索树的一个性质是中序遍历有序
查找从根节点开始查找比较,比根大向右查找,比根小向左查找
最多查找高度次,如果没找到就代表值不存在
插入如果为空,新增节点
如果不为空,按照性质插入节点
删除首先需要确定值是否在二叉树中
要删除就右四种情况
无子节点——直接删除即可,可以合并到只有一个节点的情况
只有左节点——删除,令该节点的父节点指向左节点
只有右节点——删除,令该节点的父节点指向右节点
有两个子节点——在左子树寻找关键之最大的节点或右子树的最小节点,以最小节点为例,找到最小节点后与删除节点替换,再处理替换后的节点删除问题
实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647...
多态概念多态是面向对象三大特性中相对复杂的一个,他从直观上理解就是,不同的人(对象)做同一件事情(调用函数),会产生不同的结果(状态)
多态又分为静态多态和动态多态,静态多态其实就是函数重载,在本篇文章中主要介绍动态多态,在讲到多态的原理时,我们会细讲其中的区别
定义及实现多态是在不同的为继承关系的类对象,调用同一个函数(同名函数),产生的不同的行为
例如,Student是Person的子类,同样的买票动作下,Person是全价,而Student是全价
构成条件构成多态必须有两个条件
必须通过父类的指针或引用调用虚函数
被调用的函数必须是虚函数,子类必须重写父类的虚函数
例如
1234567891011121314151617181920212223242526272829303132333435#include<iostream>using namespace std;class Person{public: virtual void Buyticket() { cout << "Person:...
继承继承的概念继承是C++面向对象的三大特性之一,他设计的初衷是为了提高代码的复用性
例如,对于重复的功能代码,我们可以提炼抽象成函数,减少代码量,提高复用性
而对于重复或者相似的类,我们也可以提炼出他们共同的部分,称之为基类,那提炼之前的类,我们可以把它想象成是基类派生出的类,称之为派生类,还有一种更形象化的叫法,父类与子类
那我们在这里就能明白了,继承是类的设计层面的复用
例如,我们想要从人派生出学生和教师两个子类,这里要重点理解两个方向,一是由下而上的集成学生和教师共同点产生的基类,二是由上而下的从人继承出学生和教师产生的子类
123456789101112class Person{public: void Print() { cout << "name:" << _name << endl; cout << "age:" << _age << endl; }protected: s...
模板进阶非类型模板参数模板参数分为类型形参和非类型形参
类型形参是出现在模板参数中,跟在class或者typename之后的参数类型名称
非类型形参是使用常量作为模板的一个参数,在类或者函数中可以作为常量使用
例如
12345678910111213141516171819202122232425262728namespace xu{ template<class T, size_t N = 10> class array { public: T& operator[](size_t index) { return _array[index]; } const T& operator[](size_t index) const { return _array[index]; } size_t size() const ...
CSS进阶复合选择器复和选择器是由两个或多个基础选择器,通过不同的方式组合而成,可以更准确、更高效的选择目标元素(标签)。
后代选择器后代选择器用于选中某元素的后代元素。
选择器写法:父选择器 子选择器 { CSS 属性},父子选择器之间用空格隔开。
12345678910<style> div span { color: red; }</style><span> span 标签</span><div> <span>这是 div 的儿子 span</span ></div>
子代选择器子代选择器用于选中某元素的子代元素(最近的子级)。
选择器写法:父选择器 > 子选择器 { CSS 属性},父子选择器之间用 > 隔开。
123456789101112<style> div > span { color: red; }</style><div> <span&g...
CSS基础层叠样式表 (Cascading Style Sheets,缩写为 CSS)是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容)。
一般在title 标签下方添加 style 双标签,style 标签里面书写 CSS 代码。
12345678910<title>CSS 初体验</title><style> /* 选择器 { } */ p { /* CSS 属性 */ color: red; }</style><p>CSS</p>
属性名和属性值成对出现 → 键值对。
CSS引入方式
内部样式表:学习使用
CSS 代码写在 style 标签里面
外部样式表:开发使用
CSS 代码写在单独的 CSS 文件中(**.css**)
在 HTML 使用 link 标签引入
1<link rel="stylesheet" href="./my.css">
行内样式:配合...
列表列表是布局内容排列整齐的区域,分为无序列表、有序列表、定义列表。
无序列表无序列表是布局排列整齐的不需要规定顺序的区域。
标签:ul 嵌套 li,ul 是无序列表,li 是列表条目。
例如
123456<ul> <li>第一项</li> <li>第二项</li> <li>第三项</li> ……</ul>
ul 标签里面只能包裹 li 标签
li 标签里面可以包裹任何内容
有序列表有序列表是布局排列整齐的需要规定顺序的区域。
标签:ol 嵌套 li,ol 是有序列表,li 是列表条目。
例如
123456<ol> <li>第一项</li> <li>第二项</li> <li>第三项</li> ……</ol>
ol 标签里面只能包裹 li 标签
li 标签里面可以包裹任何内容
定义列表标签:dl 嵌套 dt 和 dd,dl 是定义列表,dt 是定义列表的标题...
HTML 基础HTML的意思就是超文本标记语言(HyperText Markup Language),这里的超文本的意思就是多媒体内容,有文本、图片、音视频等内容,这里的标记就是使用代码的形式,使用尖括号的标签进行标记的意思,例如
标签结构
标签要成对出现,中间包裹内容
<>里面放英文字母(标签名)
结束标签比开始标签多 /
标签分类:双标签和单标签
123<strong>需要加粗的文字<strong><br><hr>
HTML骨架
html:整个网页
head:网页头部,用来存放给浏览器看的信息,例如 CSS
title:网页标题
body:网页主体,用来存放给用户看的信息,例如图片、文字
12345678<html> <head> <title>网页标题</title> </head> <body> 网页主体 </body></html>
VS Code 可以快速生成骨架:在 ...