104.二叉树的最大深度 (优先掌握递归)
什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。
大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。
题目链接/文章讲解/视频讲解: 代码随想录
/**
* 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 int maxDepth(TreeNode root) {//方法一:
if(root==null)return 0;
int size,n=0;
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
size=queue.size();
for(;size>0;size--) {
TreeNode son=queue.poll();
if(son.left!=null)queue.add(son.left);
if(son.right!=null)queue.add(son.right);
}
n++;
}
return n;
//方法二:
// int size=0;
// return maxDe(root, size);
}
public int maxDe(TreeNode root,int size) {
if(root==null)return size;
size++;
int a=maxDe(root.left,size);
int b=maxDe(root.right, size);
return a>b?a:b;
}
}
111.二叉树的最小深度 (优先掌握递归)
先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。
题目链接/文章讲解/视频讲解:代码随想录
/**
* 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 int minDepth(TreeNode root) {
// if(root==null)return 0;
// int size=0;
// return maxDe(root, size);
// }
// public int maxDe(TreeNode root,int size) {
// if(root==null)return size;
// size++;
// int a=maxDe(root.left,size);
// int b=maxDe(root.right, size);
// if(root.left==null)return b;
// if(root.right==null)return a;
// return a<b?a:b;
// }
//方法二:
public int minDepth(TreeNode root) {
if(root==null)return 0;
int size,n=1;
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
size=queue.size();
for(;size>0;size--) {
TreeNode son=queue.poll();
if(son.left==null&&son.right==null)return n;
if(son.left!=null)queue.add(son.left);
if(son.right!=null)queue.add(son.right);
}
n++;
}
return n;
}
}
222.完全二叉树的节点个数(优先掌握递归)
需要了解,普通二叉树 怎么求,完全二叉树又怎么求
题目链接/文章讲解/视频讲解:代码随想录
/**
* 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 int countNodes(TreeNode root) {//方法一:
// if(root==null)return 0;
// Queue<TreeNode> pane=new LinkedList<>();
// pane.add(root);
// int i=0;
// while(!pane.isEmpty()) {
// i++;
// TreeNode son=pane.poll();
// if(son.left!=null)pane.add(son.left);
// if(son.right!=null)pane.add(son.right);
// }
// return i;
//方法二:
if(root==null)return 0;
return Pane(root);
}
public int Pane(TreeNode root) {
int a=0,b=0;
if(root.left!=null)a=Pane(root.left);
if(root.right!=null)b=Pane(root.right);
return a+b+1;
}
}
记录
今天感觉自己是已经有点得心应手的感觉了,还有一点和示例代码可以说基本一样,而且代码都是自己先做题然后才看解析写的,每个题也都用了两种方法虽然这三道题大同小异,但我还是为自己的进步感到很开心,今天收获满满。加油!!!