力扣第543题:二叉树的直径
/**
* 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 int ans;
public int diameterOfBinaryTree(TreeNode root) {
ans = 0;
dfs(root);
return ans;
}
private int dfs(TreeNode root){
if(root == null){
return 0;
}
int l = dfs(root.left);
int r = dfs(root.right);
ans = Math.max(ans,l + r);//计算最大路径
return Math.max(l ,r) +1 ;//比较左和右谁大
}
}
力扣第102题:二叉树的层序遍历
首先创建一个队列用于不断弹出元素,首先先把root进去,然后取值,并把null排除,不断的向队列里面添加后续节点。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
ArrayList<List<Integer>> arrayList = new ArrayList<>();
if(root == null){
return arrayList;
}
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
while(!deque.isEmpty()){
ArrayList<Integer> valList = new ArrayList<>();
int n = deque.size();
for(int i = 0;i< n ;i++){
TreeNode s = deque.poll();
valList.add(s.val);
if(s.left != null){
deque.offer(s.left);
}
if(s.right != null){
deque.offer(s.right);
}
}
arrayList.add(valList);
}
return arrayList;
}
}
力扣第35题:搜索插入位置
二分查找
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left <= right){
int mid = (left + right) /2;
if(target < nums[mid]){
right = mid - 1;
}
else if(target > nums[mid]){
left = mid +1;
}
else{
return mid;
}
}
return left;
}
}
力扣第70题:爬楼梯
class Solution {
public int climbStairs(int n) {
int p =0 ,q = 0,r = 1;
for(int i = 0; i <n;i++){
p =q;
q = r;
r = p +q;
}
return r;
}
}
本文相关图片资源来自于网络中,如有侵权请联系删除!