package com.example.lib;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Stack;
import javax.swing.tree.TreeNode;
public class TreeUtils {
public static void main(String[] args) {
// 1
// 2 3
// 4 5 6
int[] arr=new int[]{1,2,3,4,5,6};
LNode node=maketree(arr,1);
System.out.println("\n前");
printPre(node);
System.out.println("\n中");
printmid(node);
System.out.println("\n后");
printafter(node);
System.out.println("\nbfs");
printbfs(node);
System.out.println("\ndfs");
printdfs(node);
}
static LNode maketree(int[] arr,int index){
if(index>arr.length){
return null;
}
LNode node=new LNode();
node.data=arr[index-1];
//l 2i 2
//r 2i+1 5
node.left=maketree(arr,2*index);
node.right=maketree(arr,2*index+1);
return node;
}
static void printPre(LNode node){
if(node==null){
return;
}
System.out.print(node.data+",");
printPre(node.left);
printPre(node.right);
}
static void printmid(LNode node){
if(node==null){
return;
}
printPre(node.left);
System.out.print(node.data+",");
printPre(node.right);
}
static void printafter(LNode node){
if(node==null){
return;
}
printPre(node.left);
printPre(node.right);
System.out.print(node.data+",");
}
//广度优先遍历是使用队列实现的
static void printbfs(LNode root){
if(root==null){
return;
}
Queue<LNode> queue=new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()){
LNode node=queue.poll();
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
System.out.print(node.data+",");
}
}
//深度优先遍历是使用队列实现的
static void printdfs(LNode root){
if(root==null){
return;
}
Stack<LNode> queue=new Stack<>();
queue.add(root);
while (!queue.isEmpty()){
LNode node=queue.pop();
if(node.right!=null){
queue.add(node.right);
}
if(node.left!=null){
queue.add(node.left);
}
System.out.print(node.data+",");
}
}
}