IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言 ,数据结构--二叉树,初步解释与实现 -> 正文阅读

[C++知识库]C语言 ,数据结构--二叉树,初步解释与实现

二叉树:可以非常形象的理解为一颗只有两个树枝的树。

? ? ? ? ? ? ? 转化为图形解释,就是一个圆圈只有两个两个圆圈和自身有关系,并且有直线和其链接。

? ? ? ? ? ? ? 转化为代码实现就是,一个节点,只携带两个指针,这两个指针分别指向一个节点。

(一).【存储结构描述】

//构造二叉树结点
typedef?struct?node
{
????DataType?data;
????struct??node?*lchild,*rchild;
}BiTNode,*BiTree;

(二).【基本操作】

1.建立二叉链表

//完全二叉树的层次顺序依次输入结点信息建立二叉链表
BiTree?CreateBinTree(BiTree?&bt,char?*t){
????BiTree?Q[MAXSIZE],s;
????int?front=1,rear=0,i=0;
????char?ch;//接受输入
????ch=t[i];
????i++;
????bt=NULL;
????while?(ch!='#')
????{
????????s=NULL;
????????if?(ch!='@')
????????{
???????????s=(BiTree)malloc(sizeof(BiTNode));
???????????s->data=ch;
???????????s->lchild=s->rchild=NULL;
????????}
????????rear++;
????????Q[rear]=s;
????????if(rear==1)
????????????bt=s;
????????else{
????????????if?(s&&Q[front])
??????????????????if?(rear%2==0)
??????????????????????Q[front]->lchild=s;
??????????????????else
??????????????????????Q[front]->rchild=s;
????????????????if(rear%2==1)
??????????????????front++;
?????????????}?
????????ch=t[i];i++;
????}
????return?bt;
}

2.前序遍历(根,左,右)

//使用递归算法对二叉树进行前序遍历(根?左?右)
void?PreOrderTraverse(BiTree?T){
????if?(T)
????{
????????printf("%c\t",T->data);
????????PreOrderTraverse(T->lchild);
????????PreOrderTraverse(T->rchild);
????}
}

3.中序遍历(左,根,右)

//使用递归算法对二叉树进行?中序遍历(左?根?右)
void??InOerderTraverse(BiTree?T){
????if?(T)
????{
????????InOerderTraverse(T->lchild);
????????printf("%c\t",T->data);
????????InOerderTraverse(T->rchild);
????}
}

4.后序遍历(左,右,根)

//使用递归算法对二叉树进行?后序遍历?(左?右?根)
void??PostOrderTraverse(BiTree?T){
????if(T){
?????????PostOrderTraverse(T->lchild);
?????????PostOrderTraverse(T->rchild);
?????????printf("%c\t",T->data);
????}
}

5.统计二叉树中叶子节点的个数

//统计二叉树中叶子结点的个数
int?LeafNodeCount(BiTree?T){
????if(!T)??return?0;
????else?if(!T->lchild&&!T->rchild)??return?1;
????else?return?LeafNodeCount(T->lchild)+LeafNodeCount(T->rchild);
}

6.统计二叉树中度为 1 的节点

//统计二叉树中度为?1?的节点
int?CountNode1(BiTree?T){
????if(!T||(!T->lchild&&!T->rchild))???return?0;
????else?if(T->lchild&&T->rchild)??return?CountNode1(T->lchild)+CountNode1(T->rchild);
???else?return?CountNode1(T->lchild)+CountNode1(T->rchild)+1;
}

7.统计二叉树中度 为 2 的节点

//统计二叉树中度为?2?的节点
?int??CountNode2(BiTree?T){
?????if(!T||(!T->lchild&&!T->rchild))??return?0;
?????else?if(T->lchild&&T->rchild)??return?CountNode2(T->lchild)+CountNode2(T->rchild)+1;
?????else?return?CountNode2(T->lchild)+CountNode2(T->rchild);
?}

8.主函数调用 与实现

int?main(){
????BiTree?B;
????char?s3[13]={'H','A','B','C','J','D','@','@','E','@','@','F','#'};
????printf("\n按完全二叉树的层次顺序依次输入结点信息建立二叉链表(HABCJD@@@@EF#)\n");
????B=CreateBinTree(B,s3);
????printf("\n使用递归算法分别进行前、中、后序遍历\n");
????PreOrderTraverse(B);printf("\n");
????InOerderTraverse(B);printf("\n");
????PostOrderTraverse(B);printf("\n");
????printf("二叉树中的叶子节点的个数:%d\n",LeafNodeCount(B));
????printf("二叉树中的度为1的节点的个数:%d\n",CountNode1(B));
????printf("二叉树中的度为2的节点的个数:%d\n",CountNode2(B));
}

10.结果实现

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:37:15  更:2022-07-04 22:40:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:15:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码