树的基本操作的非递归实现
树结点
- struct TreeNode {
- int val;
- struct TreeNode *left;
- struct TreeNode *right;
- TreeNode(int x):val(x),left(NULL),right(NULL){}
- };
- typedef struct TreeNode TreeNode;
- void visit(TreeNode *root)
- {
- if(root)
- cout <<root->val<<" ";
- }
- void preorder(TreeNode *root)
- {
- if(root)
- {
- visit(root);
- preorder(root->left);
- preorder(root->right);
- }
- }
- void preorder1(TreeNode *root)
- {
- stack<TreeNode*> s;
- while(root || !s.empty())
- {
- if(root)
- {
- visit(root);
- s.push(root->right);
- root = root->left;
- }
- else
- {
- root = s.top();
- s.pop();
- }
- }
- }
- void inorder(TreeNode *root)
- {
- if(root)
- {
- inorder(root->left);
- visit(root);
- inorder(root->right);
- }
- }
- void inorder1(TreeNode *root)
- {
- stack<TreeNode*> s;
- while(root || !s.empty())
- {
- if(root)
- {
- s.push(root);
- root = root->left;
- }
- else
- {
- root = s.top();
- s.pop();
- visit(root);
- root = root->right;
- }
- }
- }
- void postorder(TreeNode *root)
- {
- if(root)
- {
- postorder(root->left);
- postorder(root->right);
- visit(root);
- }
- }
- void postorder1(TreeNode *root)
- {
- stack<TreeNode*> s1;
- stack<TreeNode*> s2;
- if(!root) return;
- s1.push(root);
- while(!s1.empty())
- {
- s2.push(s1.top());
- s1.pop();
- if(s2.top()->left)
- s1.push(s2.top()->left);
- if(s2.top()->right)
- s1.push(s2.top()->right);
- }
- while(!s2.empty())
- {
- visit(s2.top());
- s2.pop();
- }
- }
- void postorder2(TreeNode *root)
- {
- stack<TreeNode*> s;
- TreeNode *pre = NULL;
- TreeNode *cur;
- if(!root) return;
- s.push(root);
- while(!s.empty())
- {
- cur = s.top();
- if(!pre || (pre != cur->right && pre != cur->left))
- {
- if(!cur->left && !cur->right)
- {
- visit(cur);
- s.pop();
- pre = cur;
- }
- if(cur->right)
- s.push(cur->right);
- if(cur->left)
- s.push(cur->left);
- }
- else if( pre == cur->left)
- {
- if(cur->right)
- s.push(cur->right);
- else
- {
- visit(cur);
- s.pop();
- pre = cur;
- }
- }
- else if(pre == cur->right)
- {
- visit(cur);
- s.pop();
- pre = cur;
- }
- }
- }
- void level_traversal(TreeNode *root)
- {
- queue<TreeNode*> q;
- if(!root) return;
- q.push(root);
- while(!q.empty())
- {
- if(q.front()->left)
- q.push(q.front()->left);
- if(q.front()->right)
- q.push(q.front()->right);
- visit(q.front());
- q.pop();
- }
- }
(更新中)
转载于:https://blog.51cto.com/nxlhero/1159213
树的基本操作的非递归实现相关推荐
- java非递归遍历file树_Java语言实现非递归实现树的前中后序遍历总结
前言 三种遍历的递归写法都很好写,所以总结一下非递归写法. 先贴一张图复习一下三种遍历方式就进入正文啦~ [注:本文所有代码实现中树的结点定义如下: public class Node { int v ...
- 树:二叉树的非递归遍历算法
二叉树的递归遍历 二叉树的递归遍历算法,写法很简单,比如说前序遍历树,如下: //前序遍历 void PreOrderTraverse(BiTree tree) {if (NULL != tree){ ...
- mysql 实现非递归树_二叉树的非递归前序,中序,后序遍历算法
#include #include struct tree { char data; struct tree *lchild; struct tree *rchild; }; typedef stru ...
- 树的递归与非递归遍历算法
树的递归与非递归遍历算法 树的递归与非递归遍历算法 树的遍历 实例 树遍历的口诀 树的递归遍历代码 树的先序遍历 树的中序遍历 树的后序遍历 递归遍历思想 树的非递归遍历 树的先序非递归遍历 先序遍历 ...
- 非递归式查找树形数据
给你一棵树,怎么用非递归方式去查找里面满足要求的某些节点? 可以用队列来实现,举例如下: Android界面就是基于一棵树的结构来进行显示的,怎样通过一个ViewGroup,非递归式的找到它下面所有B ...
- 二叉树(C++):创建,前中后序遍历(递归+非递归),获取叶子节点个数,获取树的高度
文章目录 前言 创建二叉树 先序遍历 中序遍历 后序遍历 获取叶子节点个数 获取树的高度 测试代码 前言 现有如下二叉树: 关于二叉树的相关操作,我们能够发现二叉树从根节点到子节点,以及每个中间节点基 ...
- python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...
前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...
- 树与二叉树的深度优先与广度优先算法(递归与非递归)
本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用 阅读本文前,可以先参考本博客 各种基本算法实现小结(三)-- 树与二叉树 和 各种基本算法实现小结( ...
- 线段树递归和非递归实现+hdu1166 敌兵布阵
递归代码: #include <string> #include <cstring> #include <iostream> #include <stdio. ...
最新文章
- CUDA 7 Stream流简化并发性
- 基于Springboot实现园区招商管理系统
- 完成动态根据类别动态填充区域颜色
- python中的绘图模块turtle的使用
- VHDL设计出租车计价器
- [2021 CSP-S提高组] 题解(廊桥分配+括号序列+回文+交通规划)
- python实例 97,98
- [Matlab] 不能在 syms 中假设 symfun 的值域
- .net页面生命周期
- ios 中NSString的一些调用
- 【图像融合】基于matlab IHS图像融合【含Matlab源码 724期】
- find命令之xargs
- 开关电源三种拓扑的产生
- MarkDown 符号大全
- 大一期末计算机考试评分标准,大学生平时成绩考核评价标准
- 小球弹跳及MATLAB实现
- echarts 实现温度计
- 制作表情包(python)
- VMware虚拟机的安装以及基一些础命令
- mysql主备方案_Mysql 主备双库方案
热门文章
- cppunit linux,Linux中使用CppUnit工具
- springboot定时执行任务
- 从网上下载的jar包导入到本地maven库
- 有STC制作一个手持微型示波器
- 机械爪角度与距离之间的关系
- 对比直立车模控制中的互补滤波、Karlman滤波和参考滤波方案
- 低内阻的MOS管 4N04R7
- 在控制台打印sql语句的办法(MyBatis Log Plugin插件的安装与使用)
- php7.2 mysql 教程_如何在PHP7中扩展mysql,先安装php7.2。后安装mysql
- 手机虚拟摄像头_没键盘也能打字?三星展示最新虚拟键盘Selfie Type:是真的