力扣刷题笔记(三)

今天就没有去做每日一题了,开始刷hot100。直接从简单的开始做,慢慢积累经验和找回手感。
今天的题目是:合并二叉树。
我的想法就是题目的想法,有个小细节就是,合并到第一棵树上,如果有的分支没有数,那就把这个地方用0代替。
这样的话,位置对应而且加起来也不会错。
解决了问题,前来报道。
是谁想出的天才想法,新增树节点的,天哪,这不是江边上卖水---多此一举嘛!够够了!这个灌了水的代码就留在这儿,就但是记录年少不懂事吧。

然后还是膜拜了题解里的大佬,说到这个,我觉得我个人的想法貌似有点奇葩,题解的大佬都用的深度遍历,而我第一个想到是层次遍历,很少人想到层次遍历哎。

深度遍历真的很简单,用的是递归。

层次遍历用的是循环,代码行数来说较多。

 1 class Solution {
 2     public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
 3         //特殊情况
 4         if(t1==null) return t2;
 5         if(t2==null) return t1;
 6         //归并到第一棵树上,所以第一棵树是基点,是模板,根据情况对
 7         //第一棵树进行加加减减
 8         Queue<TreeNode> q=new LinkedList<>();
 9         q.add(t1);
10         q.add(t2);
11         while(!q.isEmpty())
12         {
13             //为了使相同位置的节点的值进行相加&&执行层次遍历
14             TreeNode tr1=q.poll();
15             TreeNode tr2=q.poll();
16             tr1.val=tr1.val+tr2.val;
17             //如果有一个节点为空怎么办?
18             //只要考虑树一就行了,因为以树一为依托的
19             if(tr1.left==null) tr1.left=tr2.left;
20             else
21             {
22                 if(tr2.left!=null)
23                 {
24                     q.add(tr1.left);
25                     q.add(tr2.left);
26                 }
27             }
28 
29             if(tr1.right==null) tr1.right=tr2.right;
30             else
31             {
32                 if(tr2.right!=null)
33                 {
34                     q.add(tr1.right);
35                     q.add(tr2.right);
36                 }
37             }
38         }
39         return t1;
40     }
41 }
View Code

然后这个是年少不更事写的江边卖水,槽点无数的代码

 1 import java.util.LinkedList ;
 2 class Solution {
 3     public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
 4         Queue<TreeNode> q =new LinkedList<>();
 5         TreeNode tr1=null;//存储节点值的
 6         TreeNode tr2=null;
 7         TreeNode tr0 = new TreeNode(0,null,null);
 8         //特殊情况
 9         if(t1==null)
10         {
11             return t2;
12         }
13         //根节点入队
14         q.add(t1);
15         q.add(t2);
16         //层次遍历
17         while(!q.isEmpty())
18         {
19             //根节点出队,相加
20             tr1=q.poll();
21             tr2=q.poll();
22             tr1.val+=tr2.val;
23             //左右节点入队
24             //如果节点为null,就入队0,然后相加不影响,且位置对应。
25             //tr1
26             if(tr1.left==null) q.offer(tr0);
27             else q.offer(tr1.left);
28             if(tr1.right==null) q.offer(tr0);
29             else q.offer(tr1.right);
30             //tr2
31             if(tr2.left==null) q.offer(tr0);
32             else q.offer(tr2.left);
33             if(tr2.right==null) q.offer(tr0);
34             else q.offer(tr2.right);
35         }
36         return tr1;
37         }
38 }
View Code

这个代码块我真的是不知道怎么删除了TT


 

posted @ 2021-01-04 15:07  LonglonglongAL  阅读(79)  评论(0)    收藏  举报