107. 二叉树的层序遍历 II

自己做

解:先序遍历
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {private List<List<Integer>> res = new ArrayList();public void preTravel(TreeNode root, int level){if(root == null)return;if(res.size() == level){ //遍历到新的层次,要加入新列表List<Integer> new_list = new ArrayList();new_list.add(root.val);res.add(0, new_list);}else{ //已经存在该层次,取旧列表List<Integer> old_list = res.get(res.size() - level - 1);old_list.add(root.val);}preTravel(root.left, level + 1);preTravel(root.right, level + 1);}public List<List<Integer>> levelOrderBottom(TreeNode root) {preTravel(root, 0);return res;}
}
108. 将有序数组转换为二叉搜索树

自己做

解:二分查找遍历
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode buildBST(int[] nums, int begin, int end){if(begin > end)return null;int mid = (begin + end) / 2;TreeNode root = new TreeNode(nums[mid]); //中TreeNode left = buildBST(nums, begin, mid - 1); //左子树TreeNode right = buildBST(nums, mid + 1, end); //右子树root.left = left;root.right = right;return root;}public TreeNode sortedArrayToBST(int[] nums) {return buildBST(nums, 0, nums.length - 1);}
}
