根据数组建立平衡二叉搜索树

举报
兔老大 发表于 2021/04/22 00:15:21 2021/04/22
【摘要】 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉(搜索)树。   二分:用有序数组中中间的数生成搜索二叉树的头节点,然后对数组的左右部分分别生成左右子树即可(重复过程)。 生成的二叉树中序遍历一定还是这个序列。   非常简单,不过多叙述: public class SortedArrayToBalanc...

它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉(搜索)树。

 

二分:用有序数组中中间的数生成搜索二叉树的头节点,然后对数组的左右部分分别生成左右子树即可(重复过程)。

生成的二叉树中序遍历一定还是这个序列。

 

非常简单,不过多叙述:


  
  1. public class SortedArrayToBalancedBST {
  2. public static class Node {
  3. public int value;
  4. public Node left;
  5. public Node right;
  6. public Node(int data) {
  7. this.value = data;
  8. }
  9. }
  10. public static Node generateTree(int[] sortArr) {
  11. if (sortArr == null) {
  12. return null;
  13. }
  14. return generate(sortArr, 0, sortArr.length - 1);
  15. }
  16. public static Node generate(int[] sortArr, int start, int end) {
  17. if (start > end) {
  18. return null;
  19. }
  20. int mid = (start + end) / 2;
  21. Node head = new Node(sortArr[mid]);
  22. head.left = generate(sortArr, start, mid - 1);
  23. head.right = generate(sortArr, mid + 1, end);
  24. return head;
  25. }
  26. // for test -- print tree
  27. public static void printTree(Node head) {
  28. System.out.println("Binary Tree:");
  29. printInOrder(head, 0, "H", 17);
  30. System.out.println();
  31. }
  32. public static void printInOrder(Node head, int height, String to, int len) {
  33. if (head == null) {
  34. return;
  35. }
  36. printInOrder(head.right, height + 1, "v", len);
  37. String val = to + head.value + to;
  38. int lenM = val.length();
  39. int lenL = (len - lenM) / 2;
  40. int lenR = len - lenM - lenL;
  41. val = getSpace(lenL) + val + getSpace(lenR);
  42. System.out.println(getSpace(height * len) + val);
  43. printInOrder(head.left, height + 1, "^", len);
  44. }
  45. public static String getSpace(int num) {
  46. String space = " ";
  47. StringBuffer buf = new StringBuffer("");
  48. for (int i = 0; i < num; i++) {
  49. buf.append(space);
  50. }
  51. return buf.toString();
  52. }
  53. public static void main(String[] args) {
  54. int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  55. printTree(generateTree(arr));
  56. }
  57. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/84556551

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。