108. 将有序数组转换为二叉搜索树
解题思路:给了一个有序的数组,把这个数组从中间分开,挑出最中间的数作为当前节点,此数左边就是该节点的左子树,右边就是该节点的右子树。然后以这个数组分开的左右数组作为参数进行递归连接左右子树。
代码:
class Solution {public static TreeNode sortedArrayToBST(int[] nums) {return create(nums,0,nums.length-1);}public static TreeNode create(int[] nums,int l,int r){if(l>r){return null;}int mid=(l+r)/2;TreeNode root=new TreeNode(nums[mid]);root.left=create(nums,l,mid-1);root.right=create(nums,mid+1,r);return root;}
}
543. 二叉树的直径
解题思路:通过观察题目可以发现最远的两个节点一定是某一棵树的左右子树的端点,这个子树不一定是根节点的那一棵树,deep方法的作用就是检查这棵树的最远的节点的长度。diameterOfBinaryTree方法的作用就是对每一棵树都进行一个遍历然后选出最大的进行返回。
代码:
class Solution {public int diameterOfBinaryTree(TreeNode root) {if(root==null){return 0;}return Math.max(deep(root.left)+deep(root.right),Math.max(diameterOfBinaryTree(root.left),diameterOfBinaryTree(root.right)));}public int deep(TreeNode root){if(root==null){return 0;}return Math.max(deep(root.left),deep(root.right))+1;}
}