package com.atguigu.springboot.bean.binary;
import sun.reflect.generics.tree.Tree;
import java.util.*;
class TreeNode
{
TreeNode left;
TreeNode right;
int val;
TreeNode(int val)
{
this.val=val;
}
}
public class CreateTwo {
public static void main(String[] args) {
int array[]={15,7,20,-1,-1,3,12,-1,-1,-1,-1,14,8,-1,-1};
TreeNode root=builder(array);
List<List<Integer>> res=levelOrder(root);
for(List<Integer> l:res)
{
for(int a:l)
{
System.out.print(a+" ");
}
System.out.println();
}
TreeNode node=root;
Deque<TreeNode> stack=new ArrayDeque<>();
while(!stack.isEmpty()||node!=null)
{
if(node!=null)
{
System.out.println(node.val);
stack.push(node);
node=node.left;
}
else
{
node=stack.pop();
node=node.right;
}
}
}
public static TreeNode builder(int [] arr)
{
LinkedList<TreeNode> queue=new LinkedList<>();
TreeNode root=new TreeNode(arr[0]);
queue.offer(root);
int i=0;
while(i<arr.length)
{
TreeNode node=queue.poll();
if(node==null)
{
queue.offer(null);
queue.offer(null);
i+=2;
continue;
}
int leftVal=arr[++i];
int rightVal=arr[++i];
if(leftVal!=-1)
{
node.left=new TreeNode(leftVal);
queue.offer(node.left);
}
else
{
node.left=null;
queue.offer(null);
}
if(rightVal!=-1)
{
node.right=new TreeNode(rightVal);
queue.offer(node.right);
}
else
{
node.left=null;
queue.offer(null);
}
}
return root;
}
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res=new ArrayList<>();
if(root==null) return res;
LinkedList<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty())
{
List<Integer> list=new ArrayList<>();
for(int i=queue.size();i>0;i--)
{
TreeNode temp=queue.poll();
list.add(temp.val);
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
res.add(list);
}
return res;
}
}