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

外贸门户网站建设宁波seo公司联系方式

外贸门户网站建设,宁波seo公司联系方式,网站收录是什么意思,房屋设计师破解版Description 给出一个数据序列#xff0c;建立二叉排序树#xff0c;并实现删除功能 对二叉排序树进行中序遍历#xff0c;可以得到有序的数据序列 Input 第一行输入t#xff0c;表示有t个数据序列 第二行输入n#xff0c;表示首个序列包含n个数据 第三行输入n个数据… Description 给出一个数据序列建立二叉排序树并实现删除功能 对二叉排序树进行中序遍历可以得到有序的数据序列 Input 第一行输入t表示有t个数据序列 第二行输入n表示首个序列包含n个数据 第三行输入n个数据都是自然数且互不相同数据之间用空格隔开 第四行输入m表示要删除m个数据 从第五行起输入m行每行一个要删除的数据都是自然数 以此类推输入下一个示例 Output 第一行输出有序的数据序列对二叉排序树进行中序遍历可以得到 从第二行起输出删除第m个数据后的有序序列输出m行 以此类推输出下一个示例的结果 Sample #0 Input Copy 1 6 22 33 55 66 11 44 3 66 22 77 Output Copy 11 22 33 44 55 66 11 22 33 44 55 11 33 44 55 11 33 44 55 难点 1.普通的删除删除的是叶子 2.删除的是中间的节点但是只有左右子树其中一个 3.删除的节点是中间的节点且左右子树都有值 思路 1.删除的是叶子 直接把那个叶子删了不要了就是这么大气 2.删除的是中间的节点但是只有左右子树其中一个 直接将要删掉的他的子树接上去就好了 3.要删的节点左右子树都有值 我给此时的树再加一点有点突然别介意   分为两种情况 1.这个要删的节点22的左子树11只有左子树15没有右子树 2.要删的节点22的左子树11不只有一个左子树还有右子树 tips 1.为什么要找左子树最大值     因为二叉排序树左子树小于根根小于右子树所以找左子树最大一直向右找就行了 2.为什么20的左子树是不是null没有关系     因为我们只需要拿20替换22的位置花圈部分再比20小也是11的右子树的位置里肯定比11大所以11的右子树直接指向花圈部分没有问题 删除节点的的部分 分为三个部分 1.删除的节点左子树为空那就直接把这个节点的右子树接上去 2.删除的节点右子树为空那就直接把这个节点的左子树接上去 3.删除的节点左右子树不为空     root为要被删除的节点     一root的左子树只有一个左子树那就把这个节点替换要删的节点的值然后root的左指针指向被替换节点的左子树对应这张图 二左子树不只有一个节点那就找这个子树的最大值跟要删的节点替换且这个节点的父节点的右指针指向最大值的左子树对应这张图 代码部分 1.构建二叉排序树可以参考我另一篇文章DS二叉排序树之查找 结构体 建立根 剩下的元素逐个插入 2.删除元素的函数 找到要删除的元素的节点的位置 删除函数remove 完整代码 #include iostream #include queue using namespace std; struct treenod {int val;treenod* left, * right;//左右子树指针treenod(){left NULL;right NULL;}treenod(int x){val x;left NULL;right NULL;} }; queueintss;//队列用来存要建树的值 void insert(treenod* root, int num)///元素逐个插入 {if (root NULL)//遇到空就插入{root new treenod(num);}if (num root-val)//插入的值比这个节点小就往左子树继续走{insert(root-left, num);}if (num root-val)//插入的值比这个节点小就往右子树继续走{insert(root-right, num);} } treenod* buildtree()//建树 {if (ss.empty())return NULL;treenod* root;root new treenod(ss.front());//先建立根ss.pop();while (!ss.empty()){insert(root, ss.front());//剩下的元素都一个一个插入ss.pop();}return root; } void zhonxu(treenod* root) {if (root NULL)return;zhonxu(root-left);cout root-val ;zhonxu(root-right); } void remove(treenod* root)//root是要删除的节点 {if (root-right NULL)//要删的节点只有一个左子树{root root-left;return;}if (root-left NULL)//要删的节点只有一个右子树{root root-right;return;}//要删的节点存在左右子树treenod* p root-left;treenod* pre root;//可以记为要删除的节点的父节点while (p-right ! NULL){pre p; //pre可以理解为最大值的父节点p p-right; //向右子树走找最大值}if (pre root)//说明要删的节点左子树只有一个左分支没有右分支{root-val p-val;//要删除的节点的值p的值root-left p-left;//且这个被删节点的左子树要指向p的左子树delete p;return;}root-val p-val;//说明要删的节点的左子树有右子树有右分支rootroot的左子树里的最大值pre-right p-left;//最大值的父节点的右子树指向最大值的左子树delete p;return; } void removeItem(treenod* root, int num)//根节点和要删除的值 {if (root NULL)//如果遇到空节点说明不存在这个值的节点不用删除return;if (root-val num)//说明存在这个值的节点删除{remove(root);//调用删除函数return;}if (root-val num)//如果要删除的值小于这个节点的值向左子树走{removeItem(root-left, num);}if (root-val num)//如果要删除的值大于这个节点的值向右子树走{removeItem(root-right, num);} }int main() {int t;cin t;while (t--){int n;cin n;for (int i 1; i n; i){int num;cin num;ss.push(num);}treenod* root;root buildtree();zhonxu(root);cout endl;int m;cin m;for (int i 1; i m; i){int num;cin num;removeItem(root, num);zhonxu(root);cout endl;}}return 0; } 偷懒下主函数不想打注释了也不长有读题的都知道在干嘛 这周估计就更这个吧因为要备考四级了而且我也不是大佬后面的题还不太会等我慢慢学吧 不要催更不要催更不要催更 祝我四级不要再421分好吧有缘人。 我祝你六级轻松拿下600分
http://wiki.neutronadmin.com/news/52808/

相关文章:

  • c语言在线编程网站光辉网站建设公司
  • 东莞网站开发公司哪家好wordpress最好插件
  • 手机网站 切图网站开发工具设备要求
  • 凡客诚品官方网站查询哔哩哔哩网站
  • 四川煤矿基本建设工程公司网站网站底部加备案号
  • 网站策划与网上营销wordpress pitch
  • 网站 建设文档弥勒网站开发
  • 网站建设合同文百科wordpress 手机自适应
  • 湛江专业的建站托管天津大型网站设计公司
  • 全球建筑网站wordpress+屏蔽ip插件
  • 合肥做企业建网站那家好专门做lolh的网站
  • 站长工具搜索计算机软件开发专业
  • 网站建设使用哪种语言好中国核工业第五建设有限公司招聘信息
  • 网页设计与网站建设期末考试题网站营销建设策划案
  • 网络营销专业好不好seo引流什么意思
  • 公司网站开发制作公司网站建设销售是做什么的
  • 项目计划书范文案例优化模型有哪些
  • 网站推广公司兴田德润在哪里中国建筑app下载
  • led行业网站源码所有的购物平台大全
  • 建设大型网站设计公司app开发公司推荐
  • 六盘水南宁网站建设在哪买网站链接
  • 建个什么网站好如何后台修改网站联系人
  • 导购网站怎么做视频教学wordpress 当前文章所属分类
  • 哪个网站可以找设计师做设计师软件工程师证书报考要求
  • 企业网站优化公司哪家好网页设计岗位职责
  • 做暖暖视频免费观看免费网站用QQ群做网站排名
  • 网站搜索引擎友好性分析华文细黑做网站有版权吗
  • 建设部执业注册网站电子邮件无法发送wordpress
  • 深圳做网站 创同盟公司网络规划的重要性
  • 网站里的聊天怎么做汽车美容网站模板