给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)
样例
给出一棵二叉树 {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
按照从下往上的层次遍历为:
[
[15,7],
[9,20],
[3]
样例
给出一棵二叉树 {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);
}
}