flowingfog

偶尔刷题

  博客园  :: 首页  :: 新随笔  :: 联系 ::  :: 管理

分析

难度 易

来源

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/

题目

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

Example:

Given the sorted array: [-10,-3,0,5,9], 
One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST: 
      0
     / \
   -3   9
   /   /
 -10  5
解答
 1 package LeetCode;
 2 
 3 import java.util.LinkedList;
 4 import java.util.Queue;
 5 
 6 public class L108_ConvertSortedArray2BinarySearchTree {
 7     public TreeNode makeBinaryTreeByArray(int[] nums,int low,int high){
 8         if(low<=high){
 9             int mid=(high+low)/2;
10             TreeNode root=new TreeNode(nums[mid]);
11             //System.out.println(root.val);
12             root.left=makeBinaryTreeByArray(nums,low,mid-1);
13             root.right=makeBinaryTreeByArray(nums,mid+1,high);
14             return root;
15         }
16         else
17             return null;
18     }
19     public TreeNode sortedArrayToBST(int[] nums) {
20         return makeBinaryTreeByArray(nums,0,nums.length-1);
21     }
22     public void levelOrderTraversal(TreeNode root){//广度优先搜索+分层
23         if(root==null){
24             //System.out.println("empty tree");
25             return;
26         }
27         Queue<TreeNode> queue=new LinkedList<TreeNode>();
28         queue.add(root);
29         int curCount=1;//记录当前层节点数
30         int nextCount=0;//记录下一层节点数
31         int outCount=0;//记录出队列节点数
32         while(!queue.isEmpty()){
33             TreeNode node=queue.remove();
34             outCount++;
35             System.out.print(node.val+"\t");
36             if(node.left!=null){
37                 queue.add(node.left);
38                 nextCount++;
39             }
40             if(node.right!=null){
41                 queue.add(node.right);
42                 nextCount++;
43             }
44             if(outCount==curCount)//当前层全部出队列
45             {
46                 System.out.println();
47                 curCount=nextCount;
48                 outCount=0;
49             }
50         }
51         System.out.println("");
52     }
53     public static void main(String[] args){
54         int[] nums={-10,-3,0,5,9};
55         L108_ConvertSortedArray2BinarySearchTree l108=new L108_ConvertSortedArray2BinarySearchTree();
56         TreeNode root=l108.sortedArrayToBST(nums);
57         l108.levelOrderTraversal(root);
58     }
59 }

 

 

posted on 2018-11-04 10:31  flowingfog  阅读(182)  评论(0编辑  收藏  举报