package com.camnter.basicexercises.tree; import com.camnter.basicexercises.core.TreeNode; /** * 有序数组生成 平衡搜索二叉树 *

* 平衡二叉树:B 树 * 二叉搜索树:BST 树 * 平衡搜索二叉树:BBST 树 *

* B 树: * 空树也是平衡树。 * 左子树和右子树的高度差绝对值不超过 1 * 左子树和右子树也是平衡的 *

* BST 树; * 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值 * 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值 * 任意节点的左、右子树也分别为二叉查找树 * 没有键值相等的节点 *

* 思路: * 有序数组最中间的数生成 根节点 * 这个数的左边生成左子树 * 这个数的右边生成右子树 * * @author CaMnter */ public class GenerateBBST { public TreeNode generateBBST(T[] array) { if (array == null || array.length == 0) return null; return generateBBST(array, 0, array.length - 1); } public TreeNode generateBBST(T[] array, int start, int end) { if (start > end) return null; int mid = (start + end) / 2; TreeNode root = new TreeNode(array[mid]); root.left = generateBBST(array, start, mid - 1); root.right = generateBBST(array, mid + 1, end); return root; } public static void main(String[] args) { Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9}; GenerateBBST generateBBST = new GenerateBBST(); TreeNode root = generateBBST.generateBBST(array); CountLayer countLayer = new CountLayer(); countLayer.countLayer(root); } }