Review C++【二叉树】

树的概念
🐺

程序

本次二叉树程序的遍历采用递归的方式,在函数里面递归,树的左子树和右子树。

  • 节点结构体定义
    根据二叉树的原理,包含树,左子树,右子树
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🌈🌈


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值