二叉树遍历的非递归
来源:互联网 发布:上海译文出版社淘宝店 编辑:程序博客网 时间:2024/06/16 05:03
前序遍历的非递归:1、在入栈时加入结果集,不停的取左子树入栈,直到为空。2、如果栈非空,pop栈顶结点,取其右子树作为当前结点,继续第一步,直到栈为空
中序遍历的非递归:1、在入栈时,不停的取左子树入栈,直到为空。2、如果栈非空,pop栈顶结点,加入结点集,取其右子树作为当前结点,继续第一步,直到栈为空
后序遍历的非递归:1、在遍历结点时,总是先将右子树结点入栈,再将左子树结点入栈。2、如果左子树结点和右子树结点为空或者右子树结点已经访问过,弹出栈顶元素,标记已访问结点,加入结果集,直到栈为空。
具体代码如下:
class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}class Solution{ public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root; while(cur != null || !stack.empty()) { while (cur != null) { ret.add(cur.val); stack.push(cur); cur = cur.left; } if (!stack.empty()) { TreeNode tmp = stack.pop(); cur = tmp.right; } } return ret; } public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root; while(cur != null || !stack.empty()) { while (cur != null) { stack.push(cur); cur = cur.left; } if (!stack.empty()) { TreeNode tmp = stack.pop(); ret.add(tmp.val); cur = tmp.right; } } return ret; } public List<Integer> postorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root, pre = null; if (null == cur) return null; stack.push(cur); while (!stack.empty()) { TreeNode tmp = stack.peek(); if ((tmp.left == null && tmp.right == null) || (pre != null && tmp.right == pre)) { ret.add(tmp.val); stack.pop(); pre = tmp; } else { if (tmp.right != null) stack.push(tmp.right); if (tmp.left != null) stack.push(tmp.left); } } return ret; }}
0 0
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的遍历--递归+非递归
- 二叉树的递归、非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的创建,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的非递归遍历以及递归遍历
- 二叉树的非递归遍历&递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的构造,递归遍历,非递归遍历
- 二叉树的遍历(递归+非递归+层次遍历)
- 二叉树的递归遍历与非递归遍历
- android studio JNI(NDK)超详细图文步骤,适合新手
- cocoapods安装(最新)解决Error fetching https://ruby.taobao.org/: SSL问题!
- Leetcode ☞ 70. Climbing Stairs
- GCC与G++区别-摘录
- 企管软件PK“英克IS3”完胜 妙“技”有几多?(二)
- 二叉树遍历的非递归
- 第一次实验项目2-3
- C++第一次上机实验项目2----计算两个整数的和及差
- JAVAWEB学习——TOMCAT安装及虚拟目录的配置
- 第一次c++
- java解析json
- 新手入游戏行业
- ios设置状态栏隐藏和样式
- UIView任意角设置 cornerRedius