二叉树的前,中,后遍历(非递归)

来源:互联网 发布:python 自定义函数 编辑:程序博客网 时间:2024/05/20 05:03
给出一棵二叉树,返回其节点值的前序遍历。
样例
给出一棵二叉树 {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
原创粉丝点击