思路:

前序遍历路径上节点的值先放入list,然后把节点的right-child放入栈,一次前序遍历到叶节点的时候,去栈中取出节点,循环进行前序遍历到叶节点。最后返回list

public class Solution {public ArrayList<Integer> preorderTraversal(TreeNode root) {ArrayList<Integer> result = new ArrayList<Integer>();Stack<TreeNode> stack = new Stack<TreeNode>();if(root == null) {return result;}TreeNode node = null;stack.add(root);while(!stack.empty()) {node  = stack.pop();while(node != null) {result.add(node.val);if(node.right != null) {stack.push(node.right);}node = node.left;}}return result;}
}

非递归中序遍历如下

public ArrayList<Integer> inorderTraversal(TreeNode root) {ArrayList<Integer> result = new ArrayList<Integer>();Stack<TreeNode> stack = new Stack<TreeNode>();if(root == null) {return result;}stack.add(root);TreeNode node = root.left;while(!stack.empty() || node != null) {  //第二个条件意义{1,#,2}while(node != null) {stack.add(node);node = node.left;  //左子树遍历到头,依次入栈
            }node = stack.pop();result.add(node.val);node = node.right;     //右子树遍历
        }return result;}

public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}

转载于:https://www.cnblogs.com/yanghuahui/p/3489741.html

非递归遍历二叉树-前序中序相关推荐

  1. 二叉树的非递归遍历(前序中序后序非递归C语言)

    前两天做数据结构实验,要求用非递归算法遍历二叉树.只知道用栈来储存数据,具体算法还不太清楚.经过两天的搜索,看到网上很多种解法,很多解法都是用C++来写的算法,一直找不到用C语言写的算法,所以就总结了 ...

  2. 非递归遍历二叉树(后序遍历)

    非递归遍历二叉树(后序遍历) 在二叉树的遍历中,分为递归遍历与非递归遍历.非递归遍历的执行效率较高,时间复杂度小,因此采用非递归遍历有利于提高代码运行效率. //后序遍历非递归实现 void Post ...

  3. 非递归遍历二叉树 Java

    非递归实现二叉树的前序遍历```public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ret ...

  4. C++实现递归,非递归遍历二叉树(前序,中序,后序)

    初学二叉树那会儿,始终掌握不好二叉树的遍历方法,更认为非递归遍历晦涩难懂没有掌握的意义.实际上非递归的遍历方法很有用处,由于每次递归都需要将函数的信息入栈,当递归层数太深很容易就导致栈溢出,所以这个时 ...

  5. 中序非递归遍历二叉树

    二叉树的递归算法虽然简单,但是会导致时间复杂度比较高,下面给大家带来用栈实现的二叉树非递归算法 首先定义好二叉树,和元素类型为二叉树的栈 typedef struct BiTNode{TElemTyp ...

  6. 编写非递归算法实现二叉树的中序遍历

    题目要求:编写非递归算法实现二叉树的中序遍历. 遍历代码: void InOrderTraverseNR(BiTree T) {SqStack stack;InitStack(&stack); ...

  7. 数据结构专题 | 先序非递归遍历二叉树

    先序非递归遍历二叉树,主要是利用了栈的先进后出原理,用一个栈即可实现该算法,下面我们一起来看一下如何来实现吧 目录 先序建立二叉树 先序递归遍历二叉树 先序非递归遍历二叉树 先序建立二叉树 在进行先序 ...

  8. 【C语言】二叉树前序中序后序遍历详解!!!内附算法好题初阶(每日小细节021)

    二叉树三种遍历方式时刻牢记,所谓的前中后就是根的位置 前序:根->左子树->右子树 中序:左子树->根->右子树 后序:左子树->右子树->根 每日小细节新增算法好 ...

  9. 【转】更简单的非递归遍历二叉树的方法

    [转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...

  10. 更简单的非递归遍历二叉树

    解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出非递归遍历恐非易事.正因为并非易事,所 ...

最新文章

  1. Escape Time II 简单的深搜dfs()
  2. Java基础学习——多线程(线程间通信-生产者消费者代码示例)
  3. RecyclerView的基本用法
  4. 射频系统基础知识总结
  5. 丰农控股 CIO 王轶枭:万亿级农资市场,神策数据助力大丰收筑就数据驱动核心竞争力
  6. js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选
  7. 毕业半年,码过5个城市
  8. Ubuntu中MySQL的启动/关闭/重启
  9. java pgp加密_如何解密PGP加密文件(由两个PGP密钥加密.Key1具有公钥,私钥.Key2只有公钥)通过JAVA API...
  10. 获取指定月份最后一天_Excel如何计算某个月的第1天和最后1天?
  11. 信息架构、结构图、流程图
  12. Bus Hound 软件实现长时间数据自动保存
  13. 轻松让Ubunt虚拟机访问windows宿主机(本地硬盘)
  14. 新挑战新思路|山石网科互联网企业安全SD-WAN解决方案
  15. seo和sem的区别与联系
  16. 如何迅速分析出系统CPU的瓶颈在哪里
  17. 《数据库原理与应用》学习笔记(一):概论
  18. HDU 1880魔咒词典
  19. 大数据时代的“拼图者”
  20. 爬取股票收盘价,计算神奇九转

热门文章

  1. 如何将Mac上的墙纸更改为任何图像?
  2. PDFelement如何快速地将文本添加到PDF?
  3. 手机界的革命-云手机(华为云)
  4. 《程序员自我修养》阅读笔记-可执行文件装载与进程
  5. AI加持,计算机要拥有嗅觉了;GPU终于可用于Google Compute Engine | AI开发者头条
  6. 三分钟带你了解移动通讯办公软件
  7. 从虚拟化到软件定义--重新定义IT产业格局
  8. 3D游戏中的画质与效率适配(转)
  9. Submitting Applications
  10. load data infile into table 的使用例子