二叉树实战笔记:结构、遍历、接口与 OJ 实战

【数据结构】二叉树OJ练习 二叉树的最小深度、单值二叉树、相同的树、另一棵树的子树、翻转二叉树、堆成二叉树、二叉树的前序遍历、平衡二叉树 阅读详情

1. 节点与树的基本定义

关于二叉树和树的相关概念和性质,请看这篇文章的前置知识:

从堆到TopK:一文吃透核心原理与实战应用

我们现在直接用代码实现一个二叉树的基本结构:

// 二叉树节点结构体
template <class T>
struct tree_node {
	T _val;
	tree_node* _left; // 指向左子树的指针
	tree_node* _right;// 指向右子树的指针

	// 默认构造
	tree_node(const T& val = T())
		:_val(val)
		, _left(nullptr)
		, _right(nullptr)
	{ }
};

2. 手搓一个二叉树

二叉树是一种复杂的非线性结构,增删查改效率太低,我们学习二叉树是为了学习递归和分治的思想

我们用一颗固定的树来演示:

     1
    / \
   2   4
  /   /  \
 3   5    6

构造代码:

template <class T>
class binary_tree {
public:
	typedef Node tree_node<T>;
	Node* build_sample_tree() {
		Node* n1 = new Node(1);
		Node* n2 = new Node(2);
		Node* n3 = new Node(3);
		Node* n4 = new Node(4);
		Node* n5 = new Node(5);
		Node* n6 = new Node(6);

		n1->_left = n2;
		n1->_right = n4;
		n2->_left = n3;
		n4->_left = n5;
		n4->_right = n6;

		root = n1;
		return root;
	}
private:
	Node* root;

};

3. 二叉树的前中后序遍历

3.1. 递归前序遍历(根 左 右)

原理: 先处理根节点,再递归到左子树 右子树

将根节点处理完后,处理所有的左子树,再处理所有的右子树

递归三部曲: _node -> _left -> _right

在这里插入图片描述

如图:

开始根1完成,往下走,

走到以2为根的树,根2,完成,往下走

走到以3为根的树,根3,完成,往下走

遇到N,3的左子树为空,回溯,回到3,开始找3的右子树,往下走

遇到N,3的右子树为空,回溯,回到3,以3为根的树遍历完成,而3是2的左孩子,回溯,回到2,开始找2的右孩子,往下走

遇到N,2的右子树为空,回溯,回到2,以w为根的树遍历完成,而2是1的左孩子,回溯,回到1,开始找1的右孩子,往下走

…………………………

这体现了 “先走到尽头,再回溯继续” 的思想,前中后序都是这种思想

将复杂的一颗树不断细分,分成根-左子树-右子树,直到这个树不能再分,这便是递归的思想

  • “递”表示开启新方法,程序在此过程中访问下一个节点。
  • “归”表示函数返回,代表当前节点已经访问完毕。
	// 前序遍历
	void preorder(Node* root) const {
		// 根 左 右
		if (root == nullptr) {
			std::cout << "N";
			return;
		}
		// 根
		cout << root->_val << " ";
		// 左
		preorder(root->_left);
		// 右
		preorder(root->_right);
	}

3.2. 中序遍历(左 根 右)

原理: 先左,再根,再右,二叉搜索树常用(会得到有序序列)

中序遍历按照 左子树 根 右子树的顺序

开始遇到根1,找根1的左子树,往下走

遇到根2,找根2的左子树,往下走

遇到根3,找根3的左子树,往下走

遇到N,根3的左子树找到,回溯,回到根3,开始找根3的右子树,往下走

遇到N,根3的右子树找到,回溯,回到根3,以3为根的树结束,回溯,回到根2,开始找根2的右子树

………………………………

// 中序遍历 左 右 根
void inorder(Node* root) const {
	if (root == nullptr) {
		std::cout << "N";
		return;
	}
	// 左
	inorder(root->_left);
	// 根
	std::cout << root->_val << " ";
	// 右
	inorder(root->_right);
}

3.3. 后序遍历(左 右 根)

原理: 常用来释放内存(先删子节点再删父节点)

// 后序遍历 左 右 根
void postorder(Node* root) const {
	if (root == nullptr) {
		std::cout << "N";
		return;
	}
	// 左
	postorder(root->_left);
	// 右
	postorder(root->_right);
	// 根
	std::cout << root->_val << " ";
}

3.4. 图示总结

在这里插入图片描述

前中后序遍历都属于深度优先遍历(depth‑first traversal),也称深度优先搜索(depth‑first
search, DFS)
,它体现了一种 “先走到尽头,再回溯继续” 的遍历方式。

上图展示了对二叉树进行深度优先遍历的工作原理。深度优先遍历就像是绕着整棵二叉树的外围走一圈,在每个节点都会遇到三个位置,分别对应前序遍历、中序遍历和后序遍历。

4. 二叉树的层序遍历

层序遍历(Level Order Traversal)是二叉树遍历中非常特殊的一种方式:要求按照节点所在的「层次」依次访问,从根节点(第 1 层)开始,逐层向下,同一层的节点从左到右依次访问。

对于这颗树

    1
   / \
  2   4
 /   /  \
3   5    6

层序遍历严格按照:1->2->4->3->5->6这样的顺序

这里的核心矛盾是:如何保证「先处理完当前层所有节点,再处理下一层」?这就是队列要解决的问题。

要实现「按层访问」,关键是要维护一个「待处理节点的顺序」,而队列的先进先出(FIFO) 特性恰好完美匹配这个需求。

只需要一层带一层即可
在这里插入图片描述

// 层序遍历
void level_order(Node* start) {
	// 处理空节点
	if (start == nullptr) return;

	// 构造队列处理
	std::queue<Node*> q;
	q.push(start);
	// 一层出队列 一层入队列 直到队列为空 遍历完成
	while (!q.empty()) {
		Node* cur = start;
		q.pop();
		std::cout << cur->_val << " ";
		if(cur->_left) q.push(cur->_left);
		if(cur->_right) q.push(cur->_right);
	}
}

5. 二叉树相关OJ题

5.1. 单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

思路:遍历二叉树,判断每个节点的值是否相同即可,值得注意的是,空树是单值二叉树

  • 层序遍历,借助队列实现
class Solution {
public:
    bool isUnivalTree(TreeNode* root) {
        if(!root) return true;

        // 层序遍历
        std::queue<TreeNode*> q;
        q.push(root);
        int val = root->val;
        while(!q.empty()){
            TreeNode* cur = q.front();
            q.pop();
            if(!cur) continue;
            if(cur->val != val)
                return false;
            q.push(cur->left);
            q.push(cur->right);
        }
        return true;
    }
};
  • 深度优先遍历,递归实现
class Solution {
public:
    bool isUnivalTree(TreeNode* root) {
        if(!root) return true;

        // 层序遍历
        std::queue<TreeNode*> q;
        q.push(root);
        int val = root->val;
        while(!q.empty()){
            TreeNode* cur = q.front();
            q.pop();
            if(cur->val != val) return false;
            // 左子节点入队(若存在)
            if (cur->left != nullptr) q.push(cur->left);
         // 右子节点入队(若存在)
            if (cur->right != nullptr) q.push(cur->right);
        }
        return true;
    }
};

5.2. 相同的树

100. 相同的树 - 力扣(LeetCode)

思路: 两棵树走相同的路径比较路径是否相同,比较路径上的值是否相同

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        // 走相同的路径 比较值是否相同
        if(p == nullptr && q != nullptr) return false;
        if(p != nullptr && q == nullptr) return false;
        if(p == nullptr && q == nullptr) return true;

        if(p->val != q->val) return false;

        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); 
    }
};

5.3. 对称二叉树

**思路:**左子树和右子树比较,调用isSameTree就好

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return isSameTree(root->left,root->right);
    }
private:
     bool isSameTree(TreeNode* p, TreeNode* q) {
        // 走相同的路径 比较值是否相同
        if(p == nullptr && q != nullptr) return false;
        if(p != nullptr && q == nullptr) return false;
        if(p == nullptr && q == nullptr) return true;

        if(p->val != q->val) return false;

        return isSameTree(p->left, q->right) && isSameTree(p->right, q->left); 
    }
};

5.4. 另一棵树的子树

572. 另一棵树的子树 - 力扣(LeetCode)

思路:

  • 如果root为空,一定没有子树,子树题目给了是不为空的
  • root不为空,复用isSameTree,从当前节点开始比较,当前节点比较结束之后,遍历这棵树即可,需要注意的是,对于左子树和右子树遍历,逻辑条件是或,因为有一棵子树和目标子树相同就相当于这个树含有SubRoot了
class Solution {
public:
    bool isSubtree(TreeNode* root, TreeNode* subRoot) {
        // 根会走到子树 子树为空节点 一定没有subRoot
        if(!root) return false;

        // 比较当前节点
        if(root->val == subRoot->val && isSameTree(root,subRoot))
            return true;
        // 当前节点比较完成 遍历子树比较
        return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
    }
private:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        // 走相同的路径 比较值是否相同
        if(p == nullptr && q != nullptr) return false;
        if(p != nullptr && q == nullptr) return false;
        if(p == nullptr && q == nullptr) return true;

        if(p->val != q->val) return false;

        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); 
    }
};

6. 二叉树其他接口

6.1. 求二叉树的最大深度

思路:

  • 最大深度是从根节点到最深叶节点的路径长度
  • 对于每个节点来说:
    1. 空节点的深度为0
    2. 非空节点深度 = max(左子树深度,右子树深度) + 1

所以可以得到代码:

// 求一棵二叉树最大深度
size_t get_depth(Node* root) {
	if (!root) return 0;

	// 分别求左子树和右子树的深度
	size_t left_depth = get_depth(root->_left);
	size_t right_depth = get_depth(root->_right);

	// 更深的子树加根节点1 就是一棵树的深度
	return left_depth > right_depth ? left_depth + 1 : right_depth + 1;
}

6.2. 求二叉树的节点总数

思路: 一个节点的总数 = 左子树节点数 + 右子树节点数 + 当前节点本身(1)

利用分治的思想,举个例子

一个学院一个院长,两个专业,一个专业四个班,统计这个学院总共有多少人

院长将任务分发给两个专业负责人,两个专业负责人继续分发任务,给自己管理的班级再次下发任务,任务分配给四个班长,班长统计好之后,回溯给两个专业负责人,两个负责人再回溯给院长,院长根据回溯回来的数据即可得到统计

将一个大问题不断细化,分成若干个子问题,直到子问题不可再分,解决最小子问题之后,不断回溯

// 二叉树节点数目
// 左子树节点数目 + 右子树节点数目 + 当前节点本身(1)
size_t tree_size(Node* root) {
	if (!root) rteurn 0;

	return tree_size(root->_left) + tree_size(root->_right) + 1;
}

6.3. 求第k层节点个数

思路:

在这里插入图片描述

  • 第1层只有根节点
  • 第k层节点数 = 左子树第(k-1)层节点数 + 右子树第(k-1层)节点数

所以可以递归向下寻找,当k==1时返回1(说明当前节点就是那一层的节点)

// 第k层节点数目
size_t get_level_node_count(Node* root, size_t k) {
	if (!root) return 0; // 空树
	if (root != nullptr && k == 1) return 1; // 只有根节点

	return get_level_node_count(root->_left, k - 1) + get_level_node_count(root->_right, k - 1);
}

6.4. 查找值为x的节点

思路: 对于任意节点root

  • 当前节点为空---->返回空
  • 当前节点的值==x---->找到了
  • 否则,递归到左子树找,没找到,递归到右子树去找

递归的含义是:我不关心子树内部怎么找,我只关心找到了没有

// 找值为x的节点
Node* find_x(Node* root, const T& x) {
	if (!root) return nullptr;
	if (root->_val == x) return root;

	// 递归去左子树找
	Node* left = find_x(root->_left, x);
	if (left) return left;

	// 左子树没找到 右子树开始
	return find_x(root->_right, x);
}

7. 总结

通过这一章对二叉树的实现与讲解,我们从「节点结构体」出发,逐步构建了整个二叉树类的逻辑框架,真正理解了二叉树从内存组织 → 递归思想 → 遍历操作 → 内部实现机制的全过程:

  1. 树的本质是递归结构
    每个节点既是独立的对象,又是更大结构的一部分。递归构建、递归遍历、递归销毁,都是利用了树的天然递归性。掌握这一点,就能从容理解所有树形算法。
  2. 节点指针与内存管理是关键
    二叉树不像vector那样连续存储,而是通过指针连接节点。要时刻关注内存分配与释放,防止“野指针”和“内存泄漏”。
  3. 遍历是核心操作
    前序、中序、后序遍历本质是访问顺序的不同:
    • 前序:先根 → 左子树 → 右子树
    • 中序:左子树 → 根 → 右子树
    • 后序:左子树 → 右子树 → 根
      熟练掌握递归与非递归两种实现,是后续理解搜索树、平衡树的基础。
  4. 从“结构”到“抽象”
    二叉树类(binary_tree)将节点操作封装起来,隐藏底层实现,让用户只需通过接口使用。这体现了封装思想与面向对象设计的精髓。
  5. 从“代码”到“思维”
    实现二叉树不是记语法,而是训练一种“分而治之”的思维方式:每个问题都可以被拆解为子问题,解决子问题的过程往往与整体相同。
深入解析EDID中Display Descriptor Block的配置技巧与实战应用 本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。 阅读详情

相关推荐

OpenCode:终端开源AI编程助手,多模型接入与实战指南

AI编程助手正在从IDE侧边栏走向终端环境。其核心原理是让模型直接读取项目文件、执行命令、查看报错,形成从诊断到修复的完整闭环,从而解决传统插件上下文割裂的问题。技术价值在于开源透明、模型无关,既可接入OpenAI等云端服务,也能通过Ollama连接本地模型,兼顾数据安全与离线场景。在工程实践中,它适用于长时间驻留项目、自动修Bug、团队统一AI工具链等需求。OpenCode正是这样一款终端AI助手,支持灵活配置第三方API密钥,提供免费档与Go套餐,并通过Skills技能系统让模型遵循标准操作流程。同时,

weixin_28745821的博客 328

【数据结构初阶】链式二叉树接口实现+痛苦的OJ题

来自二叉树递归的压迫感!

The porters of knowledge 1849

如何使用Calibre PERC抽出 点到点/p2p 电阻

@[TOC](如何使用Calibre PERC抽点到点(p2p)电阻) 一、前言 需要实现的功能是从gds中抽出net的点到点的电阻。如下图这样。 二、准备工作 lvs rule pex rule(必要时可以自己定义RC rule) gds p2p点的坐标 定义prode.defs 因为p2p的点是变化的,所以每次prode定义都要重新出,对应的perc rule也是根据每个p2p点的定义来的,perc rule也是每次都要重新出。如果需要可以写一个脚本自动出这些定义文件。 PROBE_POINTS

kobayashiyou的博客 1万+

二叉树经典OJ题——【数据结构】

二叉树经典OJ习题,适合ACM、蓝桥杯参考观看。二叉树的前中后遍历,相同的树……编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

why 1172

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7256

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 521

【数据结构】二叉树接口的实现及OJ题

二叉树,递归想不到,非递归写不出来。

学了就忘是正常现象 1074

Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by cluster by 一、order by(全局排序) 1、作用:全局排序,只有一个reducer。 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),也正因为只有一个reducer,所以当输入的数据规模较大时会导致计算时间较长。   set hive.mapr

weixin_43230682的博客 1万+

【数据结构】递归暴力美学:二叉树链式结构的深度解析(含源码)

本文聚焦二叉树链式结构,以递归思想为核心展开解析。首先介绍链式节点的构成及适配各类二叉树的特性,随后详细讲解前序、中序、后序的递归遍历逻辑,以及借助队列实现的层序遍历。还通过代码演示节点总数、叶子节点数、树高、第 k 层节点数等统计操作的递归实现,分析避免变量累加异常的方案,讲解完全二叉树的判断方法,并结合经典 OJ 题,展现递归 “暴力美学” 在链式结构中的应用与独特魅力。

2402_87731470的博客 1万+

[Github]GitHub 2FA快速安全配置全攻略

GitHub强制要求用户启用双重身份验证(2FA)以提升代码安全。本文详细介绍了2FA的三种实现方式:TOTP应用验证(推荐)、SMS短信验证(备用)和硬件安全密钥(最安全),并提供了配置指南。特别推荐使用在线工具2FA.run快速测试TOTP功能。文章还涵盖恢复代码管理、企业级2FA策略制定以及常见问题解决方案,如时间同步问题、多设备同步等。通过强制2FA、定期审计和建立安全事件响应流程,开发者可构建更安全的代码管理体系。

冰茶的博客 2624

钢结构焊接连接工艺

钢结构焊接连接工艺

wwdoffice950426的博客 61

【数据结构】二叉树的实现&&OJ练习

二叉树的基本接口函数的实现和一些简单的OJ练习题

大三小白C++进阶之路 2135

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 1664

【数据结构OJ】BFS算法的可视化:二叉树“层序遍历”

本文介绍了二叉树的层序遍历解题思路与实现方法。核心思路是使用队列实现广度优先搜索(BFS):先将根节点入队,通过记录每层节点数level_k_size来控制遍历层数,每次循环处理一层节点,将节点值存入临时数组,并将子节点入队。最后将结果二维数组逆置即可实现自底向上的输出。

Miun123的博客 1259

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【每日OJ —— KY11 二叉树遍历】

每日OJ —— KY11 二叉树遍历

qq_73900397的博客 1099

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【数据结构】二叉树接口实现指南:递归方法的高效运用 (附经典算法OJ)

用链式结构实现二叉树,节点结构就类似于链表的节点。同时,我们还需要两个结构体类型的指针来连接孩子节点。//定义二叉树存储的数据类型//定义节点结构}BTNode;

Miun123的博客 1135

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二叉树实战:从结构到OJ全解析

二叉树的常见类型(满二叉树、完全二叉树、二叉搜索树等)。二叉树的定义与性质(根节点、子节点、度、深度等)。

Fcv_9yvr的博客 376

5.4二叉树——经典OJ题

本篇博客手撕几道经典的二叉树OJ题,它们都很好地体现了二叉树中蕴含的题目均已插入超链接,点击即可跳转~

E_han的博客 1268

【二叉树与堆:数据结构基础精讲】

本文介绍了二叉树和堆的基本概念、特性及实现方法。首先阐述了树的基本术语和概念,包括结点度、高度等。重点讲解了二叉树的定义、性质(如结点数量关系)和两种特殊形式:满二叉树和完全二叉树。随后详细介绍了堆的概念,包括其作为完全二叉树的数组表示形式,以及大堆/小堆的特性。文章提供了堆的核心实现代码,包括向上/向下调整算法等关键操作。最后探讨了堆在排序和TopK问题中的应用,并简要提及二叉树的四种遍历方式。这些数据结构为后续更复杂的数据结构学习奠定了基础。

2501_90956005的博客 989

二叉树万字详解(遍历+oj)

二叉树万字详解

JJR_YZ的博客 1331

【数据结构】二叉树及二叉树的基础oj练习

在数组存储中我们发现:假设一个父节点在数组中的下标为i,并且有左右子树的情况下(左右子树都不为空),那么它的左子树下标为2i+1,右子树下标为2i+2,如果2i+1>=n(n为总结点数),那么该节点没有左子树,同理,如果2i+2>=n,则该节点没有右子树。:如果一个节点含有子节点,则这个节点称为其子节点的双亲结点,如上图1是2的父节点,也是3的父节点。:具有相同父节点的子节点互称为兄弟节点,如上图中2,3都是1的子节点,2和3互为兄弟节点。:度为0的节点称为叶节点,例如上图中的4,5,6,7都是叶节点。

z85123789的博客 571

7.二叉树的遍历方式及二叉树习题

由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)**又可解释为根、根的左子树和根的右子树。**NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层。上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在。

Q2691463021的博客 839

【LeetCode】——链式二叉树经典OJ题详解

二叉树链式结构经典必刷题详解!!!

qq_55119554的博客 896

【链式二叉树】数据结构链式二叉树的(万字详解)

链式二叉树的详解

m0_56069910的博客 1405

【数据结构入门】二叉树(3):经典OJ题

平衡二叉树;构建二叉树;二叉树第K层结点个数;查找二叉树节点;层序遍历;判断是否是完全二叉树

欢迎来到我的博客,有问题可以联系:luoshuaishuai2001@163.com 1095

【数据结构】初等二叉树

🚩二叉树可以说是我们学习数据结构路上的第二个高的台阶,要想跨越它,需要我们多画图,多理解,多思考它的递归过程。前面树的介绍和堆这两篇文章让我们对树有了一定的了解,对于二叉树的概念也有说到,因此,本章不会对二叉树的概念及介绍深入去讲,而是着重于它的实现,着重于理解递归。🚩二叉树红黑树,AVL树,B树等等。并且,我们在面试当中,也经常会被面试官要求手撕二叉树的相关OJ题,所以,二叉树这一章节就显得额外重要,可不敢遇到困难就退缩了。🚩本章实现的二叉树是一棵普通的二叉树。

Welcome home | Jian Liao 's blog 1451
上一篇: 从堆到TopK:一文吃透核心原理与实战应用
下一篇: 万字长文带你从0到实战,全面吃透八大排序算法
Vect__
博客等级 码龄1年 204粉丝 74原创
评论 45
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值