数据结构也不是那么没意思之中序二叉树+二叉树转伪双向循环链表
全部代码
#include <iostream>
#include <stdlib.h>using namespace std;class Tree
{
public:Tree();Tree* malloc_node();int free_node(Tree*&);int create(Tree*&);int midorder(Tree*);int mid_club(Tree*);int insert_head(Tree*);int print_club();private:int number;Tree *lchild, *rchild;int ltag, rtag;
};Tree *pre = NULL; //记录线索化二叉树的时候刚刚访问过的节点
Tree *head = NULL; //线索化后做链表头指针 里面记录节点总数 根据遍历顺序不同head的左右孩子也不同 int main()
{Tree *root = NULL;root->create(root);root->midorder(root);root->insert_head(root);root->print_club();return 0;
}Tree::Tree() : number(-9999), lchild(NULL), rchild(NULL), ltag(0), rtag(0)
{ ;
} Tree* Tree::malloc_node()
{ return new Tree;
} int Tree::free_node(Tree *&node)
{ delete node; node = NULL; return 0;
} int Tree::create(Tree *&node)
{ int number = 0; cout << "请输入节点数据:" << endl; cin >> number; if (number == -1) { cout << "返回上层成功" << endl; return 0; } node = malloc_node(); node->number = number; cout << "目前位置为" << number << "的左子树,"; create(node->lchild); cout << "目前位置为" << number << "的右子树,"; create(node->rchild); return 0;
} int Tree::midorder(Tree *node)
{if (!node){return 0;}midorder(node->lchild);cout << "中序遍历结果为:" << node->number << endl; midorder(node->rchild);return 0;
}int Tree::insert_head(Tree *node)
{head = head->malloc_node();pre = head;head->ltag = 1;head->lchild = node;mid_club(node);pre->rtag = 1;pre->rchild = head;head->rchild = pre;return 0;
}int Tree::mid_club(Tree *node)
{if (node){mid_club(node->lchild);if (!node->lchild){node->ltag = 1;node->lchild = pre;}if (!pre->rchild){pre->rtag = 1;pre->rchild = node;}pre = node;mid_club(node->rchild);}return 0;
}int Tree::print_club()
{Tree *p = head->lchild;while (p != head){while (p->ltag == 0){p = p->lchild;}cout << "树转换为循环双向链表后的数据为:" << p->number << endl; while (p->rtag == 1 && p->rchild != head){p = p->rchild;cout << "树转换为循环双向链表后的数据为:" << p->number << endl; }p = p->rchild;} return 0;
}
数据结构也不是那么没意思之中序二叉树+二叉树转伪双向循环链表相关推荐
- 剑指offer之中序打印二叉树(非递归实现)
1 问题 中序打印二叉树(非递归实现),比如二叉树如下 /* 2* 3 5 * 1 4 2 3 * 3 2 1 5 1 4 2 3 中序:按左中右来打印二叉树,结果如下 3 1 2 3 1 4 5 2 ...
- 数据结构也不是那么没意思之前序二叉树+二叉树转伪双向循环链表
全部代码如下 #include <iostream> #include <stdio.h>using namespace std;class Tree { public:Tre ...
- 二叉树遍历之中序遍历
二叉树遍历之中序遍历 二叉树的中序遍历与深度优先搜索很类似,对于深度优先算法,我们使用栈(Stack),广度优先搜索使用队列(Queue).二叉树的中序遍历遵循三个步骤 遍历左树 访问根节点 遍历右数 ...
- SDUT _2117 数据结构实验之链表二:逆序建立链表
点击打开链接 数据结构实验之链表二:逆序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem D ...
- 数据结构与算法【Java】05---排序算法总结
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- //数据结构:先序、中序、后序遍历二叉树。输入数据:abd##eg###c#f#h##
//数据结构:先序.中序.后序遍历二叉树.输入数据:abd##eg###c#f#h## #include <stdio.h> #include <stdlib.h> //定义数 ...
- 数据结构练习题---先序遍历二叉树
数据结构练习题---先序遍历二叉树 时间限制(普通/Java):3000MS/10000MS 运行内存限制:65536KByte 总提交:107 测试通过:64 ...
- 数据结构_根据先序和中序构建二叉树(C语言)
数据结构总目录 根据先序和中序构建二叉树 1. 建立过程图解 假设我们已知先序序列<ABCDEFG>和中序序列<CDBAEFG>,则我们可以构建出如下一颗二叉树 构建规则分析 ...
- 数据结构 非递归实现中序遍历二叉树
参考书籍:c++ 数据结构 之前提到用递归的方法实现中序遍历二叉树,但是递归会浪费大量的空间与时间.这时候我们就在想用没有一种方式能够不依赖递归去实现遍历二叉树.我们之前学过一种数据结构可以实现这种方 ...
最新文章
- 【怎样写代码】偷窥高手 -- 反射技术(七):通过反射实例化对象
- re.search()用法详解
- BNUOJ34980方(芳)格(哥)取数(好坑)
- matplotlib命令与格式:图像(figure)与子区域(axes)布局与规划
- php 数学基础,第四章 php数学运算
- linux下不同tomcat使用不同的jdk版本
- DateTime字段控件值显示短格式的做法
- HCIE-RS面试--P/A协商(超详细!)
- 14. JavaScript Date(日期)对象
- Node.js丶Stream使用及常用方法
- html手机弧线div,纯css实现让div的四个角成弧形
- 几个支持SCORM的免费平台
- 数学建模系列(三)-评价模型(六)---神经网络评价
- 云服务器连接不上怎么办
- 了解《诗歌生成》必看的6篇论文【附打包下载地址】
- 80.90后新手开网店,经验分享,神马不见得都是浮云!
- 惊了,MATLAB竟能制作如此方便的划词翻译工具???
- 华为隐藏鸿蒙,鸿蒙系统有隐私空间吗_华为鸿蒙系统有隐私空间吗
- Js 提交 form 表单
- 如何获得最佳学习效果?
热门文章
- 智能音箱 天猫精灵 X1 + Broadlink 打造智能家居摇控
- STM32片上外设时钟使能、失能和复位的区别
- 瑞萨RH850 FCL、FDL和EEL库的配置和使用
- 10Redis--主从复制 非常重要、一主二仆、薪火相传、反客为主、哨兵模式
- MarketsandMarkets:2018年全球太阳能背板市场需求将超17亿美元
- 探索:使用北鲲云平台利用Gaussian16进行HAT反应过渡态的寻找
- 计算机积分符号,积分符号积分区间怎么打出来
- 关于树莓派4B的屏幕输入信号源由HDMI变为AV2的处理方法
- 四、划分子网和构造超网
- php bloginfo templatedirectory,lt;?phpbloginfo(#39;template_directory#39;);?这句标签什么意思?...