二叉树层次遍历II

来源:互联网 发布:淘宝售前客服是做什么? 编辑:程序博客网 时间:2024/06/07 01:55
给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)
样例
给出一棵二叉树 {3,9,20,#,#,15,7},


    3
   / \
  9  20
    /  \
   15   7
按照从下往上的层次遍历为:


[
  [15,7],
  [9,20],
  [3]

]

import java.util.ArrayList;import java.util.LinkedList;import java.util.Scanner;import java.util.Stack;/** * 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)样例给出一棵二叉树 {3,9,20,#,#,15,7},    3   / \  9  20    /  \   15   7按照从下往上的层次遍历为:[  [15,7],  [9,20],  [3]] *  * @author Dell * */public class Test70 {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<ArrayList<Integer>> levelOrderBottom(TreeNode root){          if(root==null)     return new ArrayList<ArrayList<Integer>>();        ArrayList<ArrayList<Integer>> list=new ArrayList<>();        LinkedList<TreeNode> queue=new LinkedList<>();         Stack<TreeNode> s =new Stack<>();        ArrayList<Integer> list1=new ArrayList<>();        TreeNode p=root;        queue.add(p);        queue.add(null);        while(queue.isEmpty()!=true)        {        TreeNode temp=queue.poll();               s.push(temp);        if(temp!=null)        {                if(temp.right!=null)        {        queue.add(temp.right);        }        if(temp.left!=null)        {        queue.add(temp.left);        }        }        else        {        if(queue.isEmpty()!=true)        {                queue.add(null);        }        }        }        s.pop();      while(s.isEmpty()!=true)      {        TreeNode temp1=s.pop();      if(temp1!=null)      {      list1.add(temp1.val);      }      else      {      list.add(list1);      list1=new ArrayList<>();        }      if(s.isEmpty()==true)      list.add(list1);            }         return list;}public static void main(String[] args) {TreeNode t=null;t=CreatTree(t);ArrayList<ArrayList<Integer>> list=null;       list=levelOrderBottom(t);       System.out.println(list);}}