package basic;
/**
* Created by zhouliang on 2017-03-11.
*/
class BinaryTree {
private TreeNode root;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
/**
* 递归创建二叉树
* @param node
* @param data
*/
public void buildTree(TreeNode node,int data){
if(root == null){
root = new TreeNode(data);
}else{
if(data < node.val){
if(node.left == null){
node.left = new TreeNode(data);
}else{
buildTree(node.left,data);
}
}else{
if(node.right == null){
node.right = new TreeNode(data);
}else{
buildTree(node.right,data);
}
}
}
}
/**
* 前序遍历
* @param node
*/
public void preOrder(TreeNode node){
if(node != null){
System.out.println(node.val);
preOrder(node.left);
preOrder(node.right);
}
}
/**
* 中序遍历
* @param node
*/
public void inOrder(TreeNode node){
if(node != null){
inOrder(node.left);
System.out.println(node.val);
inOrder(node.right);
}
}
/**
* 后序遍历
* @param node 一般是传入根节点
*/
public void postOrder(TreeNode node){
if(node != null){
postOrder(node.left);
postOrder(node.right);
System.out.println(node.val);
}
}
/**
* 分层打印
* @param root 树的根节点
* @return 分层后的数组
*/
public int[][] printTree(TreeNode root) {
if(root == null){
return null;
}
java.util.LinkedList<TreeNode> queue = new java.util.LinkedList<TreeNode>();
TreeNode last = root;
TreeNode nlast = null ;
TreeNode currentNode = null;
java.util.ArrayList<java.util.ArrayList<Integer>> lists = new java.util.ArrayList<java.util.ArrayList<Integer>>();
java.util.ArrayList<Integer> list = new java.util.ArrayList<Integer>();
queue.add(last);
while(!queue.isEmpty()){
currentNode = queue.poll();
list.add(currentNode.val);
if(currentNode.left!=null){
queue.add(currentNode.left);
nlast = currentNode.left;
}
if(currentNode.right!=null){
queue.add(currentNode.right);
nlast = currentNode.right;
}
if(currentNode == last){
lists.add(list);
last = nlast;
list = new java.util.ArrayList<Integer>();
}
}
int[][] result = new int[lists.size()][];
for(int i = 0 ; i < lists.size() ; i++){
result[i] = new int[lists.get(i).size()];
for(int j = 0 ; j < lists.get(i).size() ; j++){
result[i][j] = lists.get(i).get(j);
}
}
return result;
}
}