public class BinaryTree {
static class TreeNode{
int value;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.value = value;
}
}
TreeNode root;
public BinaryTree(int[] array){
root = makeBinaryTreeByArray(array,1);
}
/**
* 采用递归的方式创建一颗二叉树
* 传入的是二叉树的数组表示法
* 构造后的是二叉树的二叉链表表示法
* @param array
* @param index
* @return
*/
private static TreeNode makeBinaryTreeByArray(int[] array, int index) {
if(index<array.length){
int value = array[index];
if(value != 0){
TreeNode t = new TreeNode(value);
array[index] = 0;
t.left = makeBinaryTreeByArray(array,index*2);
t.right = makeBinaryTreeByArray(array,index*2+1);
return t;
}
}
return null;
}
/**
* 深度优先遍历,相当于先根遍历
* 采用非递归实现
* 需要辅助的数据结构:栈
*/
public void depthOrderTraversal(){
if(root == null){
System.out.println("empty tree");
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (stack.isEmpty() == false){
TreeNode node = stack.pop();
System.out.println("深度遍历结果:"+(node.value + " "));
if(node.right != null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
}
System.out.println("\n");
}
public void levelOrderTraversal(){
if (root == null){
System.out.println("empty tree");
return;
}
ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>();
queue.add(root);
while (queue.isEmpty() == false){
TreeNode node = queue.remove();
System.out.println("广度遍历结果:"+node.value);
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
System.out.println("\n");
}
public static void main(String[] args) {
int[] arr={0,13,65,5,97,25,0,37,22,0,4,28,0,0,32,0};
BinaryTree tree=new BinaryTree(arr);
tree.depthOrderTraversal();
tree.levelOrderTraversal();
}
}