二叉树的遍历非递归算法
来源:互联网 发布:mac book air i5和i7 编辑:程序博客网 时间:2024/05/28 16:03
一.先序遍历
二叉树的先序遍历其实就是深度遍历,如图所示:
用栈来实现。
首先是将所有节点的左子树的元素全部都进栈,退出循环之后,先访问树的最左边的一个节点,也就是栈顶元素,并将它pop,然后将其右子树入栈。
public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root == null)return list; Stack<TreeNode> S = new Stack<TreeNode>(); TreeNode p = root; while(p != null || !S.empty()){ while(p != null){ S.push(p); list.add(p.val); p = p.left; } p = S.pop(); p = p.right; } return list; }
二.中序遍历
用栈来实现。它与先序遍历的区别是,先序是入栈的时候访问节点的value,而中序遍历是出栈的时候,访问节点的value
public ArrayList<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root == null)return list; Stack<TreeNode> S = new Stack<TreeNode>(); TreeNode p = root; while(p!=null || !S.empty()){ while(p!=null){ S.push(p); p = p.left; } p = S.pop(); list.add(p.val); p = p.right; } return list; }
三.后序遍历
后序遍历是非递归遍历算法中最难理解的。它需要设置一个标记位,表明这棵子树已访问过。
0 0
- 二叉树遍历的非递归算法
- 遍历二叉树的非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 遍历二叉树的递归算法与非递归算法
- 二叉树的递归和非递归的遍历算法
- 遍历二叉树的递归和非递归算法
- 二叉树遍历的递归与非递归算法
- sqlserver2008 根据日志还原数据库
- USB3.0 、 Firewire S3200 、 eSATA
- 编写有提示的listbox控件
- 创业团队
- codeforces 224 B. Number Busters
- 二叉树的遍历非递归算法
- pb 中keydown(keycode)用法
- 关于Unix/Linux下查看命令行历史记录(history/.bash_history)
- 使用Eval()绑定数据时使用三元运算符
- DataOutputStream 源码分析
- SQL Server2005 表分区(第四章)
- vc 整形转字符串型和字符串转整形
- PB中DATAWINDOW实时滚动实时检索的问题
- Ruby命令行参数介绍