代码随想录之二叉树1(力扣题号)
创始人
2025-05-29 23:40:47
0

二叉树的层次遍历2

在这里插入图片描述
在最基础的层次遍历上反转即可

/*** 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 List> levelOrderBottom(TreeNode root) {//59-03if(root==null) return new ArrayList>();ArrayList> res = new ArrayList>();Queue q = new LinkedList<>();q.offer(root);while(!q.isEmpty()){int count = q.size();List row = new ArrayList<>();while(count-- >0){TreeNode node = q.poll();row.add(node.val);if(node.left!=null) q.offer(node.left);if(node.right!=null) q.offer(node.right);}res.add(row);}Collections.reverse(res);//只要加这句就行return res;}
}

199 二叉树的右视图

在这里插入图片描述

/*** 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 List rightSideView(TreeNode root) {//06-13if(root==null) return new ArrayList<>();List res = new ArrayList<>();Queue q = new LinkedList<>();q.offer(root);while(!q.isEmpty()){int count = q.size();while(count-- >0){TreeNode node = q.poll();if(count==0) res.add(node.val);//是0不是1,因为进来的count已经自减了if(node.left!=null) q.offer(node.left);if(node.right!=null) q.offer(node.right);}}return res;}
}

429 N叉树的层次遍历

在这里插入图片描述
注意看它定义的数据结构

/*
// Definition for a Node.
class Node {public int val;public List children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List _children) {val = _val;children = _children;}
};
*/class Solution {public List> levelOrder(Node root) {//22-27ArrayList> res = new ArrayList>();if(root==null) return res;Queue q = new LinkedList<>();q.offer(root);while(!q.isEmpty()){int count = q.size();List row = new ArrayList<>();while(count-- >0){Node node = q.poll();row.add(node.val);//List children这么定义的for(int i=0;iif(node.children.get(i)!=null) q.offer(node.children.get(i));}}res.add(row);}return res;}
}

116

在这里插入图片描述
在这里插入图片描述
看到样例输出以为是list,可是原函数的返回是Node,所以还奇怪了一下,其实只要把root的树的所有next赋值完成,再返回root即可

/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, Node _left, Node _right, Node _next) {val = _val;left = _left;right = _right;next = _next;}
};
*/
class Solution {public Node connect(Node root) {//32-41 输出是list?? 返回根Queue q = new LinkedList<>();if(root==null) return root;q.offer(root);while(!q.isEmpty()){int count = q.size();for(int i=0;iNode node = q.poll();if(i==count-1) node.next = null;else node.next = q.peek();//这两句是此题关键//队列中的顶的就是nextif(node.left!=null) q.offer(node.left);if(node.right!=null) q.offer(node.right);}}return root;        }
}

111 二叉树的最小深度

除了之前用的递归写法之外可以用层序遍历
只要判断左右子树都为null 就可以直接返回

/*** 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) {//46-49if(root==null) return 0;Queue q = new LinkedList<>();q.offer(root);int sum = 0;while(!q.isEmpty()){int count = q.size();sum++;while(count-- >0){TreeNode node = q.poll();if(node.left==null&&node.right==null) return sum;//求最大深度只要把这行去掉即可if(node.left!=null) q.offer(node.left);if(node.right!=null) q.offer(node.right);}}return sum;}
}

226 翻转二叉树

在这里插入图片描述
用前序遍历或者后遍历的写法都可以,本层做的事情就是将左右节点交换

/*** 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 invertTree(TreeNode root) {//55-57reverse(root);return root;}public void reverse(TreeNode root){//递归结束条件if(root==null) return;//本层做的事TreeNode tmp = root.left;root.left = root.right;root.right = tmp;//前序遍历reverse(root.left);reverse(root.right);}
}

559 n叉树的最大深度

除了用层次遍历外,用递归也很简单,在二叉树的最大深度基础上改一下即可

/*
// Definition for a Node.
class Node {public int val;public List children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List _children) {val = _val;children = _children;}
};
*/class Solution {public int maxDepth(Node root) {//57-00if(root==null) return 0;int max = 0;for(int i=0;imax = Math.max(max,maxDepth(root.children.get(i)));}return max+1;}
}

404 左叶子之和

在这里插入图片描述
还是可以用层序遍历,只要判断节点的左节点不为空,且左节点是叶子节点即可

/*** 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 sumOfLeftLeaves(TreeNode root) {//37-40Queue q = new LinkedList<>();q.offer(root);int sum = 0;while(!q.isEmpty()){TreeNode node = q.poll();if(node.left!=null&&node.left.left==null&&node.left.right==null) sum+=node.left.val;if(node.left!=null) q.offer(node.left);if(node.right!=null) q.offer(node.right);}return sum;}
}

257 二叉树到叶子节点的所有路径

在这里插入图片描述
写了很久,理解了很久,用队列来,可以记一下这题

/*** 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 List binaryTreePaths(TreeNode root) {//07-12Queue node = new LinkedList<>();Queue path = new LinkedList<>();List res = new ArrayList<>();node.offer(root);path.offer(Integer.toString(root.val));while(!node.isEmpty()){TreeNode t = node.poll();String s = path.poll();if(t.left==null&&t.right==null) res.add(s);else{if(t.left!=null){node.offer(t.left);path.offer(new StringBuilder(s).append("->").append(Integer.toString(t.left.val)).toString());}if(t.right!=null){node.offer(t.right);path.offer(new StringBuilder(s).append("->").append(Integer.toString(t.right.val)).toString());}}}return res;}
}

112 路径总和(判断有没有即可)

class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null) return false;else if(root.val==targetSum&&root.left==null&&root.right==null) return true;else return hasPathSum(root.left,targetSum-root.val)||hasPathSum(root.right,targetSum-root.val);}
}

113 路径总和2(返回路径)

/*** 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 {ArrayList path = new ArrayList<>();ArrayList> res = new ArrayList>();public List> pathSum(TreeNode root, int targetSum) {//52if(root==null) return res;dfs(root,targetSum);return res;}public void dfs(TreeNode root, int targetSum){if(root==null) return;path.add(root.val);if(root.val==targetSum&&root.left==null&&root.right==null) res.add(new ArrayList<>(path));dfs(root.left,targetSum-root.val);dfs(root.right,targetSum-root.val);path.remove(path.size()-1);}
}

相关内容

热门资讯

上海特大案件曝光!涉案金额超亿... 今年以来,公安部会同金融监管总局开展打击金融领域黑灰产违法犯罪专项工作,对保险等领域违法犯罪进行重点...
关于单方面免签政策常见问题,国... 今天(11月23日),国家移民管理局针对单方面免签政策常见问题进行解答。 1.哪些国家人员可适用单方...
“最快护士”张水华再夺冠 新京报记者 刘锦涵
 制作 葛佳丹 ▲新京报我们视频出品(ID:wevideo) 11月23日,“最...
原创 沉... 在国际关系的复杂舞台上,每一个动作都可能引发连锁反应。近期,高市早苗的发言无疑是这一舞台上的一次重要...
宁夏回族自治区党委书记,用“玫... “特别是何杰勇夺马拉松男子冠军,充分证明宁夏也能生长出绚丽的玫瑰……” 11月22日,宁夏回族自治区...
原创 日... 小泉进次郎的表态,无疑是对高市早苗政策的公开反击。尽管两人曾是同一阵营的人物,并且高市将小泉任命为防...
法律明白人|白广万:学法律强本... “以前村民来问遗产分割、合同纠纷的问题,我心里一点底都没有,只能劝大家别着急,给不出实在的办法。”回...
科技周报|多品牌手机遭遇“绿线... 多品牌手机遭遇“绿线门”,售后政策引不满 近期一场由手机屏幕绿线问题引发的消费维权潮在社交平台上持续...
美政府再次对加州提起诉讼 参考消息网11月23日报道据美联社11月21日报道,特朗普政府起诉加利福尼亚州向非法留美学生提供州内...
传“警银通”郑州暂时停用,有银... 10天前,#律师银行取4万元遭盘问报警#登上热搜。关于“银行反诈层层加码”的讨论一直在继续。 11月...