红黑树生成算法
原理: 抓住红黑树左子树比跟节点小,又节点比根节点大的定义来完成红黑树的生成
算法输入: ArrayList容器,元素为Integer型。
算法输出:TreeNode,红黑树根节点。
具体实现:
/** * 生成红黑树 * @param list 数值 * @return */ public static TreeNode generateRedBlackTree(ArrayList<Integer> list){ // 递归出口 if(list == null || list.size() == 0){ return null; } TreeNode n = new TreeNode(); // 选取输入数组的第一个作为标杆节点,比标杆小的放到左子树,大的放到右子树 int perviot = list.get(0); ArrayList<Integer> left = new ArrayList<>(); ArrayList<Integer> right = new ArrayList<>(); for(int i = 1;i<list.size();i++){ if(list.get(i) > perviot) { right.add(list.get(i)); } else{ left.add(list.get(i)); } } n.value = perviot; int[] l = new int[0]; // 递归生成 n.left = generateRedBlackTree(left); n.right = generateRedBlackTree(right); return n; }
TreeNode结构:
class TreeNode{ TreeNode left; TreeNode right; int value; }