力扣刷题笔记(三)
今天就没有去做每日一题了,开始刷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 }
然后这个是年少不更事写的江边卖水,槽点无数的代码
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 }
这个代码块我真的是不知道怎么删除了TT

浙公网安备 33010602011771号