二叉树的遍历 Java版
2016-04-21 16:00
363 查看
下面给出二叉树的前序、后序、中序遍历的递归和非递归加上层序的非递归算法
/*前序遍历,递归*/ public void preorder(TreeNode root){ TreeNode node = root; if(node!=null){ visit(node); preorder(node.left); preorder(node.right); } } /*中序遍历,递归*/ public void inorder(TreeNode root){ TreeNode node = root; if(node!=null){ inorder(node.left); visit(node); inorder(node.right); } } /*后序遍历,递归*/ public void postorder(TreeNode root){ TreeNode node = root; if(node!=null){ postorder(node.left); postorder(node.right); visit(node); } } /*前序遍历非递归*/ public void preorderNonRecursion(TreeNode root){ if(root==null) return ; TreeNode node = root; Stack<TreeNode> stack = new Stack<TreeNode>(); while(node!=null||!stack.isEmpty()){ while(node!=null){ visit(node); stack.push(node); node = node.left; } TreeNode tn = stack.pop(); node = tn.right; } } /*中序遍历非递归*/ public void inorderNonRecursion(TreeNode root){ if(root==null) return ; TreeNode node = root; Stack<TreeNode> stack = new Stack<TreeNode>(); while(node!=null||!stack.isEmpty()){ while(node!=null){ stack.push(node); node = node.left; } TreeNode tn = stack.pop(); visit(tn); node = tn.right; } } /*后序遍历非递归*/ public void postorderNonRecursion(TreeNode root){ if(root==null) return ; TreeNode node = root; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode previst = null;//记录上一次访问的节点 while(node!=null||!stack.isEmpty()){ while(node!=null){ stack.push(node); node = node.left; } TreeNode tn = stack.peek(); //如果该节点的右孩子为空,或者改节点的右孩子已经被访问过,那么访问该节点 if(tn.right==null||tn.right==previst){ visit(tn); stack.pop(); previst = tn; }else node = tn.right; } } /*层序遍历,非递归*/ public void cengNonRecursion(TreeNode root){ if(root==null) return ; TreeNode node = root; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(node); while(!queue.isEmpty()){ TreeNode tn = queue.poll(); visit(tn); if(tn.left!=null) queue.add(tn.left); if(tn.right!=null) queue.add(tn.right); } } public void visit(TreeNode node){ System.out.print(node.val+" "); }
相关文章推荐
- java LinkedList实现原理概述
- Struts2 Result详解
- Java 哈希机制
- JAVA泛型编程笔记
- JavaI/O系统
- java 读取html生成pdf
- java获取propertites文件
- [改善Java代码]断言绝对不是鸡肋
- 学习Java开源框架前你应该了解的
- Java 泛型定义在接口上
- java基础知识
- 应用层之E-mail服务及javaMail邮件发送的知识总结
- java 生成.csv文件【问题】
- java 获取MP3文件时长等信息
- JAVA基础知识点(自己总结的)
- Java 实现导出excel表 POI
- Spring mvc提交form包含date类型数据错误400问题。
- Java 字符串全面解析
- Java Web利用POI导出Excel简单例子
- Java垃圾回收机制