二叉树遍历的非递归实现
来源:互联网 发布:pp越狱助手 for mac 编辑:程序博客网 时间:2024/05/21 19:49
二叉树的非递归实现
先序遍历(先根再左后右)
算法思想:
(1)先头节点入栈,并访问该节点
(2)循环遍历当前节点,直至左孩子没有节点
(3)查看当前节点是否有右孩子。若有,回到步骤(1)。若无,退出当前节点转入父节点遍历
#java#定义二叉树的节点public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x){ val = x; }}public List<Integer> preorderTraversal(TreeNode root){ List<Integer> li = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root; while(cur!=null || !stack.isEmpty()){ while(cur!=null){ li.add(cur.val); stack.push(cur); cur=cur.left; } if(!stack.isEmpty){ cur=stack.pop(); cur = cur.right; } } return li;}
算法思想二:
遍历当前节点并访问,直至此节点无左孩子,在遍历过程中将当前节点的右孩子入栈。循环此过程。
public List<Integer> preorderTraversal(TreeNode root){ List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> rightstack = new Stack<TreeNode>(); TreeNode cur = root; while(cur!=null){ list.add(cur.val); if(cur.right!=null) rightstack.push(cur.right); cur = cur.left; if(cur==null && !stack.isEmpty()) cur = rightstack.pop(); } return list;}
中序遍历(先左再中后右)
算法思想:
(1)从根节点开始顺着左孩子向下遍历直至左孩子为空,在此过程中将经过的节点依次入栈,此时的节点为最左节点。
(2)栈顶元素出栈访问最左节点,此时对该节点的右孩子进行中序遍历。
public <list> inorderTraversal(TreeNode root){ List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> rightstack = new Stack<TreeNode>(); TreeNode cur = root; while(cur!=null || !stack.isEmpty()){ while(cur!=null){ stack.push(cur); cur = cur.left; } cur = stack.pop(); li.add(cur.val); cur = cur.right; } return li;}
0 0
- 非递归实现二叉树的遍历
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的非递归遍历实现
- 二叉树遍历的非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 非递归遍历二叉树的实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的遍历(递归实现+非递归实现)
- 二叉树的各种遍历的递归非递归实现。
- 递归、非递归实现二叉树的前中后序遍历
- Java实现二叉树的递归与非递归遍历
- 二叉树的遍历:递归和非递归实现
- 实现Java Web程序的自动登录
- Spring学习2:Spring概述
- 网络中乱码问题
- group_concat函数详解
- 安卓新手坑之一:空指针
- 二叉树遍历的非递归实现
- android显示Html文本
- ViewController的生命周期分析和使用
- list字符串排序
- SQL 基础
- Android Intent用法全面详解
- Bag of Features (BOF)图像检索算法
- STM32多个串口printf
- inline的用法