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

链式二叉树--前序中序后序遍历,高度,节点个数问题

目录

 前言:

一:链式二叉树的结构定义

 二:链式二叉树的遍历--->前序,中序,后序

1.前序

 递归展开图分析

2.中序 

递归展开图分析 

3.后序 

三:二叉树结点的求解 

1.二叉树总结点

递归展开分析 

2.二叉树叶子结点数 

递归展开分析 

3.二叉树第k层节点个数 

递归展开分析 

四:二叉树的高度 

五:总结语


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

 前言:

链式二叉树作为后续AVL树,B系列树的雏形,理解掌握链式二叉树的各种操作很重要,此处就需要用递归来实现链式二叉树的各种操作,相信认真学习过后会对递归有更深刻的理解,接下来我们就开始上菜

一:链式二叉树的结构定义

链式二叉树的结构由指针域和数值域组成,况且链式二叉树并不都是完全二叉树,还有普通二叉树,每个节点最多两个孩子

 二:链式二叉树的遍历--->前序,中序,后序

1.前序

BTNode* Buynode(int x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));if (newnode == NULL){perror("malloc fail\n");return NULL;}newnode->left = NULL;newnode->right = NULL;newnode->data = x;return newnode;
}BTNode* CreatTree()
{BTNode* n1 = Buynode(1);BTNode* n2 = Buynode(2);BTNode* n3 = Buynode(3);BTNode* n4 = Buynode(4);BTNode* n5 = Buynode(5);BTNode* n6 = Buynode(6);BTNode* n7 = Buynode(7);n1->left = n2;n1->right = n3;n2->left = n4;n2->right = n5;n3->left = n6;n3->right = n7;return n1;
}
void PrevOrder(BTNode* root)
{if (root == NULL){printf("N ");return ;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}
 递归展开图分析

2.中序 

void InOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}
递归展开图分析 

3.后序 

void PostOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}PostOrder(root->left);PostOrder(root->right);printf("%d ", root->data);
}

后续递归展开图同上展开即行

三:二叉树结点的求解 

1.二叉树总结点

// 二叉树节点个数
int BinaryTreeSize(BTNode* root)
{if (root == NULL)//递归结束条件{return 0;}return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;//从左子树和右子树中分别计数
}
递归展开分析 

2.二叉树叶子结点数 

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL)//空树返回0return 0;if (root->left == NULL && root->right == NULL)//叶子节点无孩子return 1;return BinaryTreeLeafSize(root->left)//递归往下寻找 + BinaryTreeLeafSize(root->right);
}
递归展开分析 

3.二叉树第k层节点个数 

// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return 0;if (k == 1)//循环走到k==1时停止,且不为空return 1;//分治思想:转化为求k-1层的节点数return BinaryTreeLevelKSize(root->left, k - 1) + BinaryTreeLevelKSize(root, k - 1);
}
递归展开分析 

四:二叉树的高度 

//二叉树的高度
int BinaryTreeHeight(BTNode* root)
{if (root == NULL)return 0;//记录左右长度,再进行比较int leftHeight = BinaryTreeHeight(root->left);int rightHeight = BinaryTreeHeight(root->right);return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}

 此图递归展开图就省略了昂

五:总结语

学会二叉树得学会画图,实在不懂时,画画递归展开图会好很多的

http://www.lryc.cn/news/320193.html

相关文章:

  • HCIA——TCP协议详解
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
  • 纯 CSS 实现文字换行环绕效果
  • 【爬虫逆向】Python逆向采集猫眼电影票房数据
  • 解析服务器下载速度:上行、下行与带宽之谜
  • 计算机网络的概念
  • MATLAB中的脚本和函数有什么区别?
  • 从电影《沙丘》说起——对人工智能的思考
  • 使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】
  • 学习笔记--在线强化学习与离线强化学习的异同(3)
  • 使用Thymeleaf导出PDF,页眉插入图片与内容重叠?
  • python网络编程:通过socket实现TCP客户端和服务端
  • 论文阅读——RSGPT
  • 长连接技术
  • 供电系统分类详解
  • 基于centos7的k8s最新版v1.29.2安装教程
  • 【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通
  • 如何在并行超算云上玩转PWmat③:使用Q-Flow提交计算的案例演示
  • html5cssjs代码 017样式示例
  • Vue.js动画
  • 信号与系统学习笔记——信号的分类
  • PyTorch深度学习实战(39)——小样本学习
  • 论文阅读——Vision Transformer with Deformable Attention
  • AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件
  • 【R语言基础操作】
  • sqlite 常见命令 表结构
  • 基于深度学习的车辆检测技术
  • MyBatis 之三:配置文件详解和 Mapper 接口方式
  • 【PyTorch】基础学习:一文详细介绍 torch.load() 的用法和应用
  • 事务、并发、锁机制的实现