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

头歌实践平台-数据结构-二叉树及其应用

第1关:实现二叉树的创建

#include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &i, int len)
// 利用先序遍历创建二叉树
// 参数:先序遍历字符串s,字符串初始下标i=0,字符串长度len。
// 返回:二叉树
{// 请在这里补充代码,完成本关任务/********** Begin *********/if(i>=len||s[i]=='#')return NULL;BiTreeNode*root=new BiTreeNode(s[i]);i++;root->left=CreatBiTree(s,i,len); i++;   root->right=CreatBiTree(s,i,len);return root;/********** End **********/
}void InOrder(BiTreeNode* root)
// 二叉树的中序遍历
// 参数:二叉树根节点root
// 输出:中间没有空格,末尾不换行。
{// 请在这里补充代码,完成本关任务/********** Begin *********/if(root==NULL)return;if(root->left!=NULL){InOrder(root->left);}printf("%c",root->data);if(root->right!=NULL){InOrder(root->right);}/********** End **********/}

第2关:计算二叉树的深度和节点个数

#include "binary_tree.h"int GetTreeDepth(BiTreeNode* root)
// 计算该二叉树的深度
// 参数:二叉树根节点root
// 返回:二叉树的深度
{// 请在这里补充代码,完成本关任务/********** Begin *********/int depthval,n,m;if (root==NULL) depthval=0;else{m=GetTreeDepth(root->left);n=GetTreeDepth(root->right);depthval=1+(m>n?m:n);
}return depthval;/********** End **********/
}int GetNodeNumber(BiTreeNode* root)
// 计算该二叉树的总节点个数
// 参数:二叉树根节点root
// 返回:二叉树的总节点个数
{// 请在这里补充代码,完成本关任务/********** Begin *********/int count,n,m;if(root==NULL) count= 0;else{m=GetNodeNumber(root->left);n=GetNodeNumber(root->right);count=m+n+1;}return count;/********** End **********/
}int GetLeafNodeNumber(BiTreeNode* root)
// 计算该二叉树的叶子节点个数
// 参数:二叉树根节点root
// 返回:二叉树的叶子节点个数
{// 请在这里补充代码,完成本关任务/********** Begin *********/
if (root==NULL) return 0;
else if(root->left==NULL&&root->right==NULL) return 1;
else return GetLeafNodeNumber(root->left)+ GetLeafNodeNumber(root->right);/********** End **********/
}

第3关:递归实现二叉树左右子树交换

#include "binary_tree.h"BiTreeNode* BiTreeChange(BiTreeNode* root)
// 实现二叉树左右子树的交换(递归法)
// 参数:二叉树根节点root
// 返回:二叉树
{// 请在这里补充代码,完成本关任务/********** Begin *********/if (!root) return NULL;else{BiTreeNode* p=new BiTreeNode;p=root->left;root->left=root->right;root->right=p;BiTreeChange(root->left);BiTreeChange(root->right);}return root;/********** End **********/
}void PreOrder(BiTreeNode* root)
// 二叉树的前序遍历
// 参数:二叉树根节点root
// 输出:二叉树的前序遍历,中间没有空格,末尾不换行。
{// 请在这里补充代码,完成本关任务/********** Begin *********/if (!root) {return;}else{printf("%c",root->data);PreOrder(root->left);PreOrder(root->right);}/********** End **********/
}

第4关:非递归实现二叉树左右子树交换

#include "binary_tree.h"BiTreeNode* BiTreeChangeStack(BiTreeNode* root)
// 实现二叉树左右子树的交换(栈实现)
// 参数:二叉树根节点root
// 返回:二叉树
{// 请在这里补充代码,完成本关任务/********** Begin *********/if(!root) return NULL;stack<BiTreeNode*> s; s.push(root);     //最后弹出保证根不变while(root&&!s.empty()) {BiTreeNode*p =new BiTreeNode;p=root->right;root->right=root->left;root->left=p;if(root->right)s.push(root->right);if(root->left){root=root->left;}else{root=s.top();s.pop();}}return root;/********** End **********/
}void PostOrder(BiTreeNode* root)
// 二叉树的后序遍历
// 参数:二叉树根节点root
// 输出:二叉树的后序遍历,中间没有空格,末尾不换行。
{// 请在这里补充代码,完成本关任务/********** Begin *********/if(!root) return;else{PostOrder(root->left);PostOrder(root->right);printf("%c",root->data);}/********** End **********/
}

第5关:层次遍历二叉树

#include "binary_tree.h"void HierarchyOrder(BiTreeNode* root)
// 二叉树的层次遍历(队列实现)
// 参数:二叉树根节点root
// 输出:二叉树的层次遍历,中间没有空格,末尾不换行。
{// 请在这里补充代码,完成本关任务/********** Begin *********/queue<BiTreeNode*> q;  // 创建队列对象  if(root!=NULL)  q.push(root);while(!q.empty()) {printf("%c",q.front()->data);if(q.front()->left)  q.push(q.front()->left);    if (q.front()->right)  q.push(q.front()->right);q.pop();}/********** End **********/}

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

相关文章:

  • 2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项
  • pcie【C#】
  • 西门子精智屏数据记录U盘插拔问题总结
  • (论文阅读27/100)Deep Filter Banks for Texture Recognition and Segmentation
  • ARMday06(串口)
  • Rust字符串详解
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • Window安装MongoDB
  • 20.有效的括号(LeetCode)
  • Vue3组件传参之Mitt插件方式
  • 【数据仓库】数仓分层方法
  • Linux网络——自定义协议
  • 【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】
  • 【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置
  • js控制手机蓝牙
  • C++11 原始字符串字面量R“()“
  • 【Vue原理解析】之虚拟DOM
  • HCIE-灾备技术和安全服务
  • 【图论实战】Boost学习 01:基本操作
  • Rust 中的引用与借用
  • Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型
  • XML Web 服务 Eclipse实现中的sun-jaxws.xml文件
  • 16.1 二次根式 教学设计及课堂检测设计
  • Android数据流的狂欢:Channel与Flow
  • Java 单元测试最佳实践:如何充分利用测试自动化
  • windows系统用于 SDN 的软件负载均衡器 (SLB)
  • 漏洞复现--IP-guard flexpaper RCE
  • Electron-vue出现GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案
  • Linux---(六)自动化构建工具 make/Makefile
  • 谷歌:编写干净的代码以减少认知负荷