当前位置:   article > 正文

(二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2

(二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2

层序遍历 10

综合代码:
  1. class Solution{
  2. public List<List<Integer>> resList = new ArrayList<List<Integer>>();
  3. public List<List<Integer>> levelOrder(TreeNode root){
  4. checkFund02(root);
  5. return resList;
  6. }
  7. public void checkFund02(TreeNode node){
  8. if(node == null) return;
  9. //创建一个队列,用于存储待处理的节点
  10. Queue<TreeNode> que = new LinkedList<TreeNode>();
  11. que.offer(node);
  12. while(!que.isEmpty()){
  13. List<Integer> itemList = new ArrayList<Integer>();
  14. int len = que.size();
  15. for(int i = 0; i<len; i++){
  16. TreeNode tmpNode = que.poll();
  17. itemList.add(tmpNode.val);
  18. if(tmpNode.left != null) que.offer(tmpNode.left);
  19. if(tmpNode.right != null) que.offer(tmpNode.right);
  20. }
  21. resList.add(itemList);
  22. }
  23. }
  24. }

226.翻转二叉树

226. 翻转二叉树 - 力扣(LeetCode)

代码随想录 (programmercarl.com)

翻转一棵二叉树

226.翻转二叉树

这道题不能使用中序遍历,因为会翻转2次,我使用的是后序遍历:

  1. //确定参数的返回值
  2. public TreeNode invertTree(TreeNode root){
  3. //确定终止条件
  4. if(root == null){
  5. return null;
  6. }
  7. //确定单层递归的逻辑:
  8. //后序遍历翻转二叉树
  9. invertTree(root.left);
  10. invertTree(root.right);
  11. invertTree(root);
  12. return root;
  13. }
  14. //定义一个私有方法,用于交换给定节点的左右孩子
  15. private void swapChildren(TreeNode root){
  16. TreeNode tmp = root.left;
  17. root.left = root.right;
  18. root.right = tmp;
  19. }

更简洁版本:

  1. class Solution {
  2. public TreeNode invertTree(TreeNode root) {
  3. if (root == null)
  4. return root;
  5. TreeNode temp = root.left;
  6. root.left = invertTree(root.right);
  7. root.right = invertTree(temp);
  8. return root;
  9. }
  10. }

101.对称二叉树 2

  1. class Solution {
  2. public boolean isSymmetric(TreeNode root) {
  3. if(root==null || (root.left==null && root.right==null)) {
  4. return true;
  5. }
  6. //用队列保存节点
  7. LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
  8. //将根节点的左右孩子放到队列中
  9. queue.add(root.left);
  10. queue.add(root.right);
  11. while(queue.size()>0) {
  12. //从队列中取出两个节点,再比较这两个节点
  13. TreeNode left = queue.removeFirst();
  14. TreeNode right = queue.removeFirst();
  15. //如果两个节点都为空就继续循环,两者有一个为空就返回false
  16. if(left==null && right==null) {
  17. continue;
  18. }
  19. if(left==null || right==null) {
  20. return false;
  21. }
  22. if(left.val!=right.val) {
  23. return false;
  24. }
  25. //将左节点的左孩子, 右节点的右孩子放入队列
  26. queue.add(left.left);
  27. queue.add(right.right);
  28. //将左节点的右孩子,右节点的左孩子放入队列
  29. queue.add(left.right);
  30. queue.add(right.left);
  31. }
  32. return true;
  33. }
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/674512
推荐阅读
相关标签
  

闽ICP备14008679号