验证中...
助力高校计算机教育 —— 码云为老师推出免费高校版,高达 200 人的协作团队
语言: Java
分类: 算法分析
最后更新于 2018-06-14 19:34
二叉树数据结构
原始数据 复制代码
package com.cooper.binarytree;
import java.util.ArrayList;
import java.util.List;
/**
* @author 10400
* @create 2018-06-14 17:53
*/
public class BinaryTree<E> {
//根节点
private TreeNode<E> root;
//存放树节点
private List<TreeNode<E>> list;
/**
* 树节点
*/
class TreeNode<E>{
TreeNode left;
TreeNode right;
E e;
public TreeNode(TreeNode left,TreeNode right,E e){
this.e = e;
this.left = left;
this.right = right;
}
}
/**
* 获取根节点元素内容
* @return
*/
public E getRootElement(){
return root.e;
}
/**
* 通过数组创建树,转换规则:依次为节点列表中的左右孩子赋值。
* 左子树 = 2*i + 1
* 右子树 = 2*i + 2
* @return
*/
public void createBTreeByArray(E[] array){
list = new ArrayList<>();
for (E e: array) {
TreeNode<E> treeNode = new TreeNode<>(null,null,e);
list.add(treeNode);
}
//初始化对象树
for(int i = 0; i < (array.length/2) ; i++){
list.get(i).left = list.get(2 * i + 1);
list.get(i).right = list.get(2 * i + 2);
}
}
/**
* 先序遍历
*/
public void indorder(TreeNode<E> root){
if(root == null){
return;
}
System.out.println("data = " + root.e);
indorder(root.left); //递归输出左子树
indorder(root.right);//递归输出右子树
}
/**
* 中序遍历
* @param root
*/
public void inOrderTraverse(TreeNode<E> root){
if(root == null){
return;
}
inOrderTraverse(root.left);
System.out.println("data = " + root.e);
inOrderTraverse(root.right);
}
/**
* 后续遍历
* @param root
*/
public void postOrderTraverse(TreeNode<E> root){
if(root == null){
return;
}
postOrderTraverse(root.left);
postOrderTraverse(root.right);
System.out.println("data " + root.e);
}
public static void main(String[] args) {
BinaryTree<Integer> binaryTree = new BinaryTree<>();
binaryTree.createBTreeByArray(new Integer[]{1,2,3,4,5,6,7,8,9});
System.out.println(" 先序遍历:" );
binaryTree.indorder(binaryTree.list.get(0));
System.out.println(" 中序遍历:" );
binaryTree.inOrderTraverse(binaryTree.list.get(0));
System.out.println(" 后序遍历:" );
binaryTree.postOrderTraverse(binaryTree.list.get(0));
}
}

评论列表( 0 )

你可以在登录后,发表评论

10_float_left_people 10_float_left_close