96SEO 2026-02-19 20:55 39
在学习二叉树的基本操作前需先要创建一棵二叉树然后才能学习其相关的基本操作。

由于现在我们对二叉树结构掌握还不够深入为了降低学习成本此处手动快速创建一棵简单的二叉树快速进入二叉树操作学习等二叉树结构了解的差不多时我们反过头再来研究二叉树真正的创建方式。
(BTNode*)malloc(sizeof(BTNode));assert(node);node-data
学习二叉树结构最简单的方式就是遍历。
所谓二叉树遍历(Traversal)是按照某种特定的规则依次对二叉树中的节点进行相应的操作并且每个节点只操作一次。
访问结点所做的操作依赖于具体的应用问题。
遍历是二叉树上最重要的运算之一也是二叉树上进行其它运算的基础。
亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。
中序遍历(Inorder
Traversal)——访问根结点的操作发生在遍历其左右子树之中间。
后序遍历(Postorder
Traversal)——访问根结点的操作发生在遍历其左右子树之后。
根、根的左子树和根的右子树。
NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。
对于二叉树的遍历代码写起来很简单但是对于初学者来说要理解起来就有点难了这里先给出三种遍历的代码大家可以先看看
root-data);PreOrder(root-left);PreOrder(root-right);
);return;}InOrder(root-left);printf(%d
root-data);InOrder(root-right);
);return;}PostOrder(root-left);PostOrder(root-right);printf(%d
看完代码后是不是觉得这三种遍历都非常的相似呢?我们在编译器上运行一下三种遍历的代码
CreatBinaryTree();PreOrder(root);printf(\n);InOrder(root);printf(\n);PostOrder(root);return
二叉树的层序遍历是一种广度优先搜索BFS的方法。
它按层级顺序逐层遍历二叉树即从根节点开始先遍历第一层节点然后遍历第二层节点依次类推直到遍历完所有层级。
出队一个节点将其值存储到结果列表中。
若该节点有左孩子则将左孩子入队。
若该节点有右孩子则将右孩子入队。
这样当队列为空时遍历过程就完成了结果列表中存储着层序遍历的结果。
(front-left){a.push(front-left);}if
(front-right){a.push(front-right);}}
CreatBinaryTree();LevelOrder(root);return
定义一个全局变量count然后遍历每一个节点每遍历一个节点count就自加1
NULL){return;}count;TreeSize1(root-left);TreeSize1(root-right);
CreatBinaryTree();printf(TreeSize2:
首先检查根节点是否为空如果为空说明这是一个空树直接返回0。
如果根节点不为空则递归调用自身来计算左子树和右子树的节点数然后将左子树节点数、右子树节点数以及根节点本身1个节点的数量相加最后返回结果。
0。
接着通过判断根节点的左子树和右子树是否都为空来确定当前节点是否为叶子节点。
如果是叶子节点返回
1。
如果不是叶子节点递归调用自身来计算左子树和右子树的叶子节点数并将其相加作为结果返回。
CreatBinaryTree();printf(TreeLeafSize:
首先检查根节点是否为空如果为空说明这是一个空树直接返回0。
如果k等于1说明当前层即为目标层返回1。
如果k大于1则递归调用自身来计算左子树和右子树中第k-1层节点的数量并将其相加作为结果返回。
CreatBinaryTree();printf(TreeKLevel:
2));//第2层节点数量printf(TreeKLevel:
3));//第3层节点数量printf(TreeKLevel:
CreatBinaryTree();printf(TreeDepth:
首先检查根节点是否为空如果为空说明这是一个空树直接返回深度0。
接着函数通过递归调用自身来计算左子树和右子树的深度分别将结果存储在变量l和r中。
然后通过比较l和r的大小选择较大的值并将其加1代表当前节点的深度作为整棵二叉树的深度。
ret-data);}else{printf(找不到\n);}return
首先检查根节点是否为空如果为空说明这是一个空树直接返回NULL。
接着函数检查当前节点的数据是否等于目标值x如果等于说明找到了目标节点返回指向当前节点的指针。
如果不等于递归调用函数分别在左子树和右子树中查找目标值x如果返回的指针非空说明在子树中找到了目标节点直接返回该指针。
如果左右子树都没有找到目标节点则返回NULL。
通过这种递归的方式函数可以在二叉树中查找特定值的节点并返回指向该节点的指针。
如果找不到目标值则返回NULL。
对于二叉树的销毁我们不能使用先序遍历因为如果使用先序遍历会将二叉树的根节点先销毁掉这样就无法找到根节点的左子树和右子树了如果一定要使用先序遍历那就得先把节点的左子树和右子树先保存下来。
但如果使用后序遍历就可以轻松解决了。
NULL){return;}TreeDestory(root-left);TreeDestory(root-right);free(root);
CreatBinaryTree();PreOrder(root);TreeDestory(root);root
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback