您的位置:首页 > 其它

二叉树的锯齿形层次遍历

2017-06-13 21:09 330 查看
给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 

样例

给出一棵二叉树 {3,9,20,#,#,15,7},

    3

   / \

  9  20

    /  \

   15   7

返回其锯齿形的层次遍历为:

[

  [3],

  [20,9],

  [15,7]

]

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
返回其锯齿形的层次遍历为:
[
[3],
[20,9],
[15,7]
]
* @author Dell
*
*/
public class Test71 {
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>> zigzagLevelOrder(TreeNode root)
{
if(root==null)
{
return new ArrayList<ArrayList<Integer>>();
}
ArrayList<ArrayList<Integer>> list=new ArrayList<>();
ArrayList<Integer> list1=new ArrayList<>();
LinkedList<TreeNode> queue=new LinkedList<>();
Stack<TreeNode> s=new Stack<>();
TreeNode p=root;
queue.add(p);
queue.add(null);
int layer=0;
while(queue.isEmpty()!=true)
{
TreeNode temp=queue.poll();
if(temp!=null)
{
if(layer%2==0)
{
list1.add(temp.val);
}
else
{
s.push(temp);
}
if(temp.left!=null)
{
queue.add(temp.left);
}
if(temp.right!=null)
{
queue.add(temp.right);
}
}
else
{
if(queue.isEmpty()!=true)
{
queue.add(null);
if(layer%2==0)
list.add(list1);
else
{
while(s.isEmpty()!=true)
{
list1.add(s.pop().val);
}
list.add(list1);
}
list1=new ArrayList<>();
layer++;
}
else
{ if(layer%2==0)
list.add(list1);
else
{
while(s.isEmpty()!=true)
{
list1.add(s.pop().val);
}
list.add(list1);
}
}

}

}
return list;
}
public static void main(String[] args) {
TreeNode t=null;
t=CreatTree(t);
ArrayList<ArrayList<Integer>> list=null;
list=zigzagLevelOrder(t);
System.out.println(list);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode