博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环遍历二叉树
阅读量:6499 次
发布时间:2019-06-24

本文共 2402 字,大约阅读时间需要 8 分钟。

hot3.png

前序遍历 

struct Node{	Node*left;	Node*right;	int data;	Node(){ func; }};Node* create(Node*p, int depth){	if (p && depth)	{		p->left = new Node;		p->right = new Node;		p->data = depth;		create(p->left, depth - 1);		create(p->right, depth - 1);	}	if (!depth)	{		p->left = nullptr;		p->right = nullptr;		p->data = depth;	}	return p;}void print1(Node*p){	if (p)	{		cout << p->data << " ";		print1(p->left);		print1(p->right);	}}void print2(Node*head)//利用stack 模拟函数调用过程 来遍历{	stack
s; Node*p = head; { while (p) { s.push(p); cout << p->data << " "; p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right && pp != head) { cout << pp->right->data << " "; } s.pop(); } } { p = head->right; while (p) { s.push(p); cout << p->data << " "; p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right && pp != head) { cout << pp->right->data << " "; } s.pop(); } }}int main(){ Node* head = new Node; create(head, 2); head->data = 10; head->left->data = 6; head->right->data = 14; head->left->left->data = 4; head->left->right->data = 8; head->right->left->data = 12; head->right->right->data = 16; print1(head);//递归遍历 cout << endl; print2(head);//循环遍历 system("pause"); return 0;}

 

中序

void print2(Node*head){	stack
s; Node*p = head; { while (p) { s.push(p); // cout << p->data << " "; p = p->left; } while (!s.empty()) { Node*pp = s.top(); cout << pp->data << " "; if (pp->right && pp != head ) { cout << pp->right->data << " "; } s.pop(); } } { p = head->right; while (p) { s.push(p); p = p->left; } while (!s.empty()) { Node*pp = s.top(); cout << pp->data << " "; if (pp->right&& pp != head) { cout << pp->right->data << " "; } s.pop(); } }}

后序

void print2(Node*head){	stack
s; Node*p = head; { while (p) { s.push(p); p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right && pp != head ) { cout << pp->right->data << " "; } if ( pp != head) cout << pp->data << " "; s.pop(); } } { p = head->right; while (p) { s.push(p); p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right&& pp != head) { cout << pp->right->data << " "; } cout << pp->data << " "; s.pop(); } } cout << head->data << " ";}

转载于:https://my.oschina.net/zhangjie5201314/blog/775478

你可能感兴趣的文章
1.JSONObject与JSONArray的使用
查看>>
34.TokenInterceptor防止表单重复提交
查看>>
cogs 362. [CEOI2004]锯木厂选址
查看>>
Python中处理时间 —— time模块
查看>>
Twisted模块示例
查看>>
WCF优化的几个常规思路
查看>>
Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...
查看>>
npm-debug.log文件出现原因
查看>>
You may remembe MBT Changa
查看>>
洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
查看>>
洛谷P4705 玩游戏(生成函数+多项式运算)
查看>>
Vue API(directives) 自定义指令
查看>>
python中的类的成员变量以及property函数
查看>>
ECMAScript 5 —— 单体内置对象之Math对象
查看>>
svn服务器发生变更,如何切换
查看>>
HashMap和Hashtable的区别
查看>>
检测到有潜在危险的 Request.Form 值
查看>>
[学习笔记]最小割之最小点权覆盖&&最大点权独立集
查看>>
Android Touch事件传递机制 二:单纯的(伪生命周期) 这个清楚一点
查看>>
Django web框架
查看>>