23王道——层次遍历、非递归中序遍历
各种结构的结构体一定要写对呀,差一个*都不行
马上要去上课了,贴完代码就先跑路了
树 {数据,左右孩子指针}
上下都有名字,还有一个带*的
队列 {数据,next指针}
上下都有名字
还有一个队头队尾指针,下面有名字栈{数据,top}
上下都有名字,一个总,一个分
#include<iostream>
using namespace std;
#define MAXSIZE 40//树
typedef struct Treenode {int data;struct Treenode* lchild, * rchild;
}Treenode,*Tree;//队列
typedef struct Linknode{Treenode* data;//辅助队列保存指针struct Linknode* next;
}Linknode;typedef struct {Linknode* front, * rear;
}Queue;//栈
typedef struct Stacknode {Treenode* data[MAXSIZE];int top;
}LiStack;//初始化树
void InitTree(Tree &T) {T = NULL;
}//建立有序二叉树
int bulid(Tree &T, int e) {if (T == NULL) {//当前结点为空T = new Treenode;T->data = e;T->lchild = NULL;T->rchild = NULL;return 0;}if (e < T->data) {//应插在左孩子bulid(T->lchild, e);}else {bulid(T->rchild, e);}return 0;
}void visit(Tree T) {cout << T->data << " ";
}//先序遍历树
void preorder(Tree T) {if (T != NULL) {visit(T);preorder(T->lchild);preorder(T->rchild);}
}void midorder(Tree T) {if (T!=NULL) {midorder(T->lchild);visit(T);midorder(T->rchild);}
}//初始化队列
void InitQueue(Queue& Q) {Q.front = Q.rear = NULL;
}//入队
void enQueue(Queue& Q, Tree T) {Linknode* p = new Linknode;p->data = T;p->next = NULL;if (Q.front == NULL) {Q.front = p;Q.rear = p;}else {Q.rear->next = p;Q.rear = p;}
}//出队
bool deQueue(Queue& Q,Tree &p) {if (Q.front == NULL) {cout << "空队列" << endl;return false;}else {p = Q.front->data;Q.front = Q.front->next;if (Q.front == NULL)//最后一个结点Q.rear = Q.front;return true;}
}//判空队列
bool empty(Queue Q) {if (Q.front == NULL)return true;return false;
}//层次遍历
void wide_order(Tree T) {Queue Q;InitQueue(Q);enQueue(Q, T);//根节点入队Tree p;while (!empty(Q)) {deQueue(Q, p);//这里有问题visit(p);if (p->lchild != NULL) {enQueue(Q, p->lchild);}if (p->rchild != NULL)enQueue(Q, p->rchild);}}//初始化栈
void InitStack(LiStack& S) {S.top = -1;
}//入栈
bool push(LiStack& S,Tree T) {if (S.top == MAXSIZE - 1) {return false;//满}else {S.data[++S.top] = T;return true;}
}//出栈
bool pop(LiStack& S, Tree& p) {if (S.top == -1)return false;else {p = S.data[S.top--];return true;}
}//判空栈
bool emptyStack(LiStack S) {if (S.top == -1)return true;return false;
}//非递归中序遍历
void mid_order(Tree T) {LiStack S;InitStack(S);Treenode* p = T;while (p || !emptyStack(S)) {if (p) {push(S, p);p = p->lchild;}else {pop(S, p);visit(p);p = p->rchild;}}
}int main() {Tree T;InitTree(T);bulid(T, 10);bulid(T, 20);bulid(T, 8);bulid(T, 22);bulid(T, 5);bulid(T, 9);bulid(T, 7);/*树结构:10/ \ 8 20 / \ \5 9 22\7*/cout << "先序遍历:";preorder(T);cout << endl;//cout << Q.front->next->data->data;/*Queue Q;InitQueue(Q);Tree p;enQueue(Q, T);enQueue(Q, T->lchild);deQueue(Q, p);cout << p->data;deQueue(Q, p);cout << p->data;*/cout << "层次遍历:";wide_order(T);cout << endl;cout << "递归中序遍历:";midorder(T);cout << endl;cout << "非递归中序遍历:";mid_order(T);cout << endl;return 0;
}
23王道——层次遍历、非递归中序遍历相关推荐
- 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树
import java.util.Stack;public class Front {//非递归前序遍历public void front(TreeNode node) {Stack<TreeN ...
- 数据结构之---非递归中序遍历二叉树
二叉树中序非递归遍历算法实现 大家好,我是逝去的粒子,从今天起,我将尝试着数据结构从0开始学习分享,此篇文章作为试验,一方面可以为自己做笔记防止遗忘,另一方面希望可以帮助大家.不废话,正式开始. 1. ...
- 非递归中序遍历二叉树总结(2种方法)
算法 非递归中序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.03 传送门 非递归先序遍历二叉树 非递归后序遍历二叉树 方法1 先序遍历是第一次遇到该节点遍历 ...
- 二叉树非递归中序遍历
二叉树的中序遍历 为什么把中序遍历放在最前面呢,因为在非递归遍历中,这个是最简单也是最容易理解的,所以放在第一个的位置. 中序遍历的递归算法很简单,但是想要非递归的实现,就要用到栈这个数据结构, 那么 ...
- 非递归中序遍历二叉树
中序遍历二叉树(递归) void inOrder(BT* root) {if (root == NULL)return;inOrder(root->lchild);cout << & ...
- 无栈非递归中序遍历非线索化二叉树
试设计一个非递归算法,按中根顺序遍历非线索二叉树,但不得用任何辅助. 在执行算法期间,允许改变LLINK和RLINK的值. 如何不用辅助栈非递归遍历二叉树呢? 这里给出了一个比较方便的算法,其基本思路 ...
- 不用栈实现二叉树非递归中序遍历
偶尔看到这样一个问题: 有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针. 要求不用递归,中序遍历这棵树.另要求空间复杂度是O(1). 空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所 ...
- LeetCode:二叉树的非递归中序遍历
第一次动手写二叉树的,有点小激动,64行的if花了点时间,上传leetcode一次点亮~~~ 1 /* inorder traversal binary tree */ 2 #include < ...
- 非递归先序遍历二叉树总结(3种方法)
算法 非递归先序遍历二叉树总结(3种方法) @author:Jingdai @date:2020.12.03 传送门 非递归中序遍历二叉树 非递归后序遍历二叉树 递归先序遍历二叉树非常的简单,但是面试 ...
- 二叉树非递归后序遍历算法
与正常的非递归中序遍历算法不同于两点: 一 比正常的中序遍历算法多了对数据元素的标记. 在压数据元素入栈(标记记为0,用来表示访问了其左子树)时标记, 还有访问完左子树利用gettop()获取双亲通 ...
最新文章
- 【 English 】社会类高频词汇、固定搭配
- cv2.dnn读取模型报错
- day38--MySQL基础二
- 【数据中台】你的企业是否需要建设数据中台?
- 深度学习:向人工智能迈进
- Eureka深入理解
- Java中随机数的原理,以及使用时的注意点
- matconvnet在ubuntu15.10下配置和使用方法
- 云图说|初识云数据库GaussDB(for Redis)
- 在游戏设备上砸钱 其实小姐姐们更疯狂!
- 为信息产业自主化而奋斗,第一本龙芯平台的Linux内核书来了!
- 【大数据部落】IBM SPSS Modeler通过数据挖掘我们能从股市数据得到什么
- JS包含js文件 动态添加css
- 山东烟建借沟通CTBS实现财务数据大集中
- 44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
- .NET Standard中配置TargetFrameworks输出多版本类库
- 柯西过程(Cauchy process)
- ORAN C平面 Section Extension 5
- 2013-07-22 码市-武汉 返程票
- 追逐冠军的少年 | 算法工程师岗毕业三年总结
热门文章
- excel函数公式html文档,excel公式embed怎么用
- 微信自动发卡机器人说明
- sap 双计量单位_SAP 基本计量单位更改(转载)
- cdr软件百度百科_cdr是什么软件?
- POJ 3233 Matrix Power Series(java)
- 计算机病毒论文课题内容,计算机病毒防治学论文选题 计算机病毒防治论文题目怎样定...
- 为什么央行降息降准,会导致债券价格上涨?
- 【PS图像处理】修改图层中文字图形的颜色
- 乐鑫科技推出基于 ESP32-C3 的 Wi-Fi 单火线智能开关方案
- 第二十期 U-Boot添加web failsafe功能《路由器就是开发板》