当前位置:   article > 正文

026-leetcode-树-将有序数组转化为二叉搜索树

026-leetcode-树-将有序数组转化为二叉搜索树
  1. package tree;
  2. import java.util.Deque;
  3. import java.util.LinkedList;
  4. /*
  5. 将有序数组转换为二叉搜索树
  6. 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
  7. 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
  8. 示例 1:
  9. 输入:nums = [-10,-3,0,5,9]
  10. 输出:[0,-3,9,-10,null,5]
  11. 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
  12. 作者:力扣 (LeetCode)
  13. 链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xninbt/
  14. 来源:力扣(LeetCode)
  15. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  16. * */
  17. public class SortedArrayToBST {
  18. private static class TreeNode {
  19. int val;
  20. TreeNode left;
  21. TreeNode right;
  22. TreeNode(int val, TreeNode left, TreeNode right) {
  23. this.val = val;
  24. this.left = left;
  25. this.right = right;
  26. }
  27. TreeNode(int val) {
  28. this.val = val;
  29. }
  30. }
  31. public static void main(String[] args) {
  32. int[] nums = {-10,-3, 0, 5, 9};
  33. TreeNode rootNode = sortedArrayToBST(nums);
  34. Deque<TreeNode> deque = new LinkedList<>();
  35. deque.addLast(rootNode);
  36. while (!deque.isEmpty()){
  37. int size = deque.size();
  38. while(size-->0){
  39. TreeNode node = deque.pop();
  40. System.out.println(" "+node.val);
  41. if (node.left!=null) {
  42. deque.addLast(node.left);
  43. }
  44. if (node.right!=null) {
  45. deque.addLast(node.right);
  46. }
  47. }
  48. System.out.println("---------");
  49. }
  50. }
  51. private static TreeNode sortedArrayToBST(int[] nums){
  52. if (nums == null || nums.length == 0){
  53. return null;
  54. }
  55. return sortedArrayToBST(nums, 0, nums.length-1);
  56. }
  57. // AVL
  58. // nums start end
  59. // root mid
  60. // start mid-1
  61. // mid+1 end
  62. // 0
  63. // -10 5
  64. // -3 9
  65. private static TreeNode sortedArrayToBST(int[] nums, int start, int end){
  66. if (start > end){
  67. return null;
  68. }
  69. int mid = (start+end)>>1;
  70. System.out.println("mid "+mid+" start "+start+" end "+end+" value "+nums[mid]);
  71. TreeNode root = new TreeNode(nums[mid]);
  72. root.left = sortedArrayToBST(nums, start, mid-1);
  73. root.right = sortedArrayToBST(nums, mid+1, end);
  74. return root;
  75. }
  76. }

输出:

  1. mid 2 start 0 end 4 value 0
  2. mid 0 start 0 end 1 value -10
  3. mid 1 start 1 end 1 value -3
  4. mid 3 start 3 end 4 value 5
  5. mid 4 start 4 end 4 value 9
  6. 0
  7. ---------
  8. -10
  9. 5
  10. ---------
  11. -3
  12. 9
  13. ---------

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50716
推荐阅读
相关标签
  

闽ICP备14008679号