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++知识库]二叉树的编程

一.树的遍历

二.统计叶子的数量

三.求树的高度

四.拷贝二叉树

五.释放二叉树

binaryTree.h

?
#pragma once
#include<stdio.h>
#include<string>
#include<stdlib.h>
struct BinaryNode
{
char ch;//数据域
struct BinaryNode* lChild;//左孩子节点
struct BinaryNode* rChild;//右孩子节点
};
//遍历树
void showBinaryTree(struct Binary*rrot);
//统计叶子的数量
void calculateLeafNum(struct BinaryNode*root,int num);
//求树的高度
int getTreeHeight(struct BinaryNode*root);
//拷贝二叉树
struct BinaryNode*copyBinaryTree(struct BinaryNode*root);
//释放二叉树
void freeTree(struct BinaryNode*root);

tset.c

void tset()
{
struct BinaryNode nodeA={'A',NULL,NULL};
struct BinaryNode nodeB={'B',NULL,NULL};
struct BinaryNode nodeC={'C',NULL,NULL};
struct BinaryNode nodeD={'D',NULL,NULL};
struct BinaryNode nodeE={'E',NULL,NULL};
struct BinaryNode nodeF={'F',NULL,NULL};
struct BinaryNode nodeG={'G',NULL,NULL};
struct BinaryNode nodeH={'H',NULL,NULL};
//建立节点关系
nodeA.lChild=&nodeB;
nodeA.rChild=&nodeF;
nodeB.rChild=&nodeC;
nodeC.rChild=&nodeE;
nodeC.lChild=&nodeD;
nodeF.rChild=&nodeG;
nodeG.lChild=&nodeH;

//1.递归遍历
showBinaryTree(&nodeA)

//2.求叶子的数量
int num=0;
calculateLeafNum(nodeA,&num);
printf("叶子的数量为:%d\n",num)

//3.求树的高度/深度
int height=getTreeHeight(&nodeA);
printf("树的高度为:%d\n",height);

//4.拷贝二叉树
struct BinaryNode*newTree=copyBinaryTree(&nodeA);
showBinaryTree(newTree);
printf("\n");

//释放二叉树
freeTree(newTree);
}
int main()
{
tset()
systrm("puase");
return EXIT_SUCCESS;
}

binaryTree.c

include"binaryTree.h"
                        //遍历树
void showBinaryTree(struct Binary*rrot)
{
if(NULL==root)
{
return;
}
printf("%c",root->ch);
showBinaryTree(root->lChild);
showBinaryTree(root->rChild);
}
                                //统计叶子的数量
void calculateLeafNum(struct BinaryNode*root,int num)
{
if(NULL= root)
{
return;
}
if(root->lChild==NULL&&root->rChild==NULL)
{
(*num)++;
}
calculateLeafNum(root->lChid,num);
calculateLeafNum(root->rChid,num);

}
                              //求树的高度
int getTreeHeight(struct BinaryNode*root)
{
if(NULL == root)
{
return NULL;
}
//求出叶子的高度
int lHeight=getTreeHeight(root->lHeight);
int rHeight-getTreeHeight(root->rHeight);
//取左子树 和右子树中的最大值+1
int height=lHeight>rHeight?lHeight+1:rHeight+1;
return height
}
                            //拷贝二叉树
struct BinaryNode*copyBinaryTree(struct BinaryNode*root)
{
if(NUUl==root)
{
return NULL;
}
//先拷贝左子树
struct BinaryNode*copyBinaryTree(root->lChild);
//在拷贝右子树
struct BinaryNode*copyBinaryTree(root->rChild);
//创建新的节点
struct Binary*newNode=malloc(sizeof(struct(struct BinaryNode));
newNode->lChild=lChild;
newNode->rChild=rChild;
newNode->ch=root->ch;
//返回给用户
return newNode;
}
                        //释放二叉树
void freeTree(struct BinaryNode*root)
{
if(NULL==root)
{
return ;
}
//先舒服左子树
freeTree(root->lChild);
//再释放右子树
freeTree(root->rChild);
printf("%c 被释放了",root->ch);
//释放根节点
freeTree(root);
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:51:59  更:2022-01-16 12:53:14 
 
开发: 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/24 10:26:51-

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