代码随想录 Day15 - 二叉树(二)
作者:jjn0703
- 2023-07-13 江苏
本文字数:1739 字
阅读完需:约 6 分钟
作业题
层序遍历,类似 BFS 写法,遍历每一层的时候,添加下一层的节点到队列中,避免死循环,需要在每一层开始遍历之前,就记录一下节点数量,并且将结果记录到数组。
102. 二叉树的层序遍历
package jjn.carl.binary_tree;
import commons.BinaryTreeHelper;
import commons.TreeNode;
import java.util.*;
/**
* @author Jiang Jining
* @since 2023-07-12 23:40
*/
public class LeetCode102 {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> level = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode poll = queue.poll();
if (poll == null) {
continue;
}
level.add(poll.val);
if (poll.left != null) {
queue.offer(poll.left);
}
if (poll.right != null) {
queue.offer(poll.right);
}
}
result.add(level);
}
return result;
}
public static void main(String[] args) {
List<Integer> input = new ArrayList<>();
input.addAll(List.of(3, 9, 20));
input.add(null);
input.add(null);
input.add(15);
input.add(7);
TreeNode root = BinaryTreeHelper.buildTree(input);
List<List<Integer>> levelledOrder = new LeetCode102().levelOrder(root);
System.out.println("levelledOrder = " + levelledOrder);
}
}
复制代码
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) {
if (root == null) {
return root;
}
TreeNode left = root.left;
TreeNode right = root.right;
root.left = invertTree(right);
root.right = invertTree(left);
return root;
}
}
复制代码
101. 对称二叉树
借助函数 isSymmetricPairs 来判断两棵子树是否对称,即树 1 的左节点和树 2 的右节点,树 2 的左节点和树 1 的右节点是否相等。
/**
* 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 boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetricPairs(root.left, root.right);
}
private boolean isSymmetricPairs(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null) {
return false;
}
if (left.val != right.val) {
return false;
}
return isSymmetricPairs(left.left, right.right) && isSymmetricPairs(left.right, right.left);
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 5
版权声明: 本文为 InfoQ 作者【jjn0703】的原创文章。
原文链接:【http://xie.infoq.cn/article/b2aa0c805da15145e9fc16b0e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
jjn0703
关注
Java工程师/终身学习者 2018-03-26 加入
USTC硕士/健身健美爱好者/Java工程师.
评论