二叉树的前,中,后遍历(非递归)
来源:互联网 发布:python 自定义函数 编辑:程序博客网 时间:2024/05/20 05:03
给出一棵二叉树,返回其节点值的前序遍历。
样例
给出一棵二叉树 {1,#,2,3},
1
\
2
/
3
样例
给出一棵二叉树 {1,#,2,3},
1
\
2
/
3
返回 [1,2,3].
给出一棵二叉树,返回其中序遍历
样例
给出二叉树 {1,#,2,3},
1
\
2
/
3
返回 [1,3,2].
给出一棵二叉树,返回其节点值的后序遍历。
样例
给出一棵二叉树 {1,#,2,3},
1
\
2
/
3
返回 [3,2,1]
import java.util.ArrayList;import java.util.Scanner;import java.util.Stack;/** * 给出一棵二叉树,返回其节点值的后序遍历。样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1] * * @author Dell * */public class Test68 {public static TreeNode CreatTree(TreeNode t) { Scanner sc=null; sc=new Scanner(System.in); t=creatNode(t,sc); return t; } private static TreeNode creatNode(TreeNode t, Scanner sc) { String temp=sc.next();if(temp.trim().equals("#")){return null;}else{t=new TreeNode(Integer.parseInt(temp));t.left=creatNode(t.left,sc);t.right=creatNode(t.right,sc);return t;}}//前序遍历public static ArrayList<Integer> preorderTraversal(TreeNode root){ TreeNode p=root; Stack<TreeNode> s=new Stack<>(); ArrayList<Integer> list=new ArrayList<>(); while(p!=null||s.isEmpty()!=true) { if(p!=null) { list.add(p.val); s.push(p); p=p.left; } else { TreeNode temp=s.pop(); p=temp.right; } }return list;}//中序遍历public static ArrayList<Integer> inorderTraversal(TreeNode root){ TreeNode p=root; Stack<TreeNode> s=new Stack<>(); ArrayList<Integer> list=new ArrayList<>(); while(p!=null||s.isEmpty()!=true) { if(p!=null) { s.push(p); p=p.left; } else { TreeNode temp=s.pop(); list.add(temp.val); p=temp.right; } }return list; }//后续遍历法一public static ArrayList<Integer> postorderTraversal(TreeNode root){ Stack<TreeNode> s1=new Stack<>();Stack<TreeNode> s2=new Stack<>();TreeNode p=root;ArrayList<Integer> list=new ArrayList<>();while(p!=null||s1.isEmpty()!=true){if(p!=null){s2.push(p);s1.push(p);p=p.right;}else{TreeNode temp=s1.pop();p=temp.left;}}while(s2.isEmpty()!=true){list.add(s2.pop().val);}return list;}//后续遍历法2public static ArrayList<Integer> postorderTraversal2(TreeNode root){Stack<TreeNode> s=new Stack<>();TreeNode p=root;ArrayList<Integer> list=new ArrayList<>();while(p!=null||s.isEmpty()!=true){if(p!=null){ s.push(p); p=p.left;}else{ TreeNode temp=s.peek(); if(temp.flag==false) { temp.flag=true; p=temp.right; } else { list.add(s.pop().val); }}}return list;}public static void main(String[] args) {TreeNode t=null;t=CreatTree(t); ArrayList<Integer> list=null; //list=preorderTraversal(t); //list=inorderTraversal(t); //list=postorderTraversal(t); list=postorderTraversal2(t); System.out.println(list); }}
阅读全文
0 0
- 二叉树的前,中,后遍历(非递归)
- 二叉树的非递归【前/中/后 序遍历】
- 前,中,后序遍历二叉树 (递归 && 非递归的栈 && 非递归非栈的线索二叉树)
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- 二叉树前、中、后及层次非递归遍历
- 二叉树非递归前、中、后序遍历
- 二叉树非递归前、中、后序遍历实现
- 二叉树前、中、后非递归遍历
- 二叉树非递归遍历 (前,中,后) c
- 非递归前,中,后序遍历二叉树
- 二叉树的前序,中序,后序的递归与非递归遍历
- 【二叉树】实现二叉树的前序、中序、后序的非递归遍历
- 二叉树的创建,遍历(前序,中序,后序)-递归 非递归
- 二叉树的遍历(前 中 后序 )递归 非递归算法
- 递归、非递归的前、中、后序遍历二叉树
- 二叉树的前序、中序、后序遍历 递归非递归实现
- (前、中、后)序遍历二叉树的递归、非递归算法!
- 基于单链表和环形队列的生产消费模型
- 鼠标事件获取鼠标坐标
- 素数筛——Eratosthenes 素数筛、Euler 素数筛
- 设计模式之抽象工厂模式(三)
- ios 自动换行flowLayout
- 二叉树的前,中,后遍历(非递归)
- struts2请求无法跳转到后台执行acton方法
- 支付宝接口程序、文档及解读(ASP.NET)
- 红外接收电路自己制作,我用过的
- 电脑的并口针脚定义
- OnCreate函数
- PADS快捷键定义
- 做DSP最应该懂得157个问题
- 甘肃人的尴尬瞬间