树的概念
🐺
程序
本次二叉树程序的遍历采用递归的方式,在函数里面递归,树的左子树和右子树。
- 节点结构体定义
根据二叉树的原理,包含树,左子树,右子树
typedef struct BINARYNODE
{
char data;
struct BINARYNODE* leftchild;
struct BINARYNODE* rightchild;
}BinaryNode;
- 先序遍历
void FirstReturnBinary(BinaryNode *root) {
if(root == NULL) {
return;
}
//根数据
std::cout << "root.data:" << root->data << std::endl;
// 遍历左子树
FirstReturnBinary(root->leftchild);
// 遍历右子树
FirstReturnBinary(root->rightchild);
}
- 中序遍历
void MidReturnBinary(BinaryNode *root) {
if(root == NULL) {
return;
}
// 遍历左子树
MidReturnBinary(root->leftchild);
//根 数据
std::cout << "root.data:" << root->data << std::endl;
// 遍历右子树
MidReturnBinary(root->rightchild);
}
- 后序遍历
void LaterReturnBinary(BinaryNode *root) {
if(root == NULL) {
return;
}
// 遍历左子树
LaterReturnBinary(root->leftchild);
// 遍历右子树
LaterReturnBinary(root->rightchild);
//根数据
std::cout << "root.data:" << root->data << std::endl;
}
- 求二叉树的子节点个数
int CaculateNumNode(BinaryNode *root ,int &num_input) {
if(root == NULL) {
return -1;
}
// 左子树和右子树都为空
if(root->leftchild == NULL && root->rightchild == NULL) {
num_input ++;
return num_input;
}
// 左子树的节点
CaculateNumNode(root->leftchild,num_input);
// 右子树的节点
CaculateNumNode(root->rightchild,num_input);
}
- 遍历二叉树
void Resursion(BinaryNode* root) {
if(root == NULL){
return;
}
std::cout << "root.ch" << root->data << std::endl;
Resursion(root->leftchild);
Resursion(root->rightchild);
}
- 二叉树的拷贝
BinaryNode* CopyBinaryNode(BinaryNode* root) {
if(root == NULL){
return NULL;
}
// 拷贝左子树
BinaryNode* Leftchild = CopyBinaryNode(root->leftchild);
// 拷贝右子树
BinaryNode* Rightchild = CopyBinaryNode(root->rightchild);
// 创建节点
BinaryNode* newnode = new BinaryNode;
newnode->data = root->data;
newnode->leftchild = Leftchild;
newnode->rightchild = Rightchild;
return newnode;
}
- 二叉树的释放
void FreeBinaryNode(BinaryNode* root)
{
if(root == NULL) {
return;
}
// 释放左子树
FreeBinaryNode(root->leftchild);
// 释放右子树
FreeBinaryNode(root->rightchild);
// 释放当前节点
free(root);
}
- 二叉树的创建和使用
void CreatBinaryNode()
{
BinaryNode node1 = {'A',NULL,NULL};
BinaryNode node2 = {'B',NULL,NULL};
BinaryNode node3 = {'C',NULL,NULL};
BinaryNode node4 = {'D',NULL,NULL};
BinaryNode node5 = {'E',NULL,NULL};
BinaryNode node6 = {'F',NULL,NULL};
BinaryNode node7 = {'G',NULL,NULL};
BinaryNode node8 = {'H',NULL,NULL};
node1.leftchild = &node2;
node1.rightchild = &node6;
node2.rightchild = &node3;
node3.leftchild = &node4;
node3.rightchild = &node5;
node6.rightchild = &node7;
node7.leftchild = &node8;
// 先序遍历
FirstReturnBinary(&node1);
// 中序
MidReturnBinary(&node1);
// 中序
LaterReturnBinary(&node1);
}
🌸🌸🌸完结撒花🌸🌸🌸
🌈🌈@FAE🌈🌈