当前位置:   article > 正文

录子训练营DAY15 | 102层序遍历 226.翻转二叉树 101.对称二叉树

录子训练营DAY15 | 102层序遍历 226.翻转二叉树 101.对称二叉树

102 二叉树的层序遍历

题目链接

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

  1. var levelOrder = function (root) {
  2. let res = [];
  3. if(root==null) return res;
  4. // 用队列来辅助层序遍历
  5. let que = [];
  6. que.push(root);
  7. while(que.length){
  8. let len = que.length;
  9. let row = [];
  10. while(len--){
  11. let top = que.shift();
  12. row.push(top.val);
  13. top.left && que.push(top.left);
  14. top.right && que.push(top.right);
  15. }
  16. res.push(row);
  17. }
  18. return res;
  19. };

226.翻转二叉树 

题目链接

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

  1. var invertTree = function (root) {
  2. // 首先应该明确的一点是,递归先序遍历,翻转每个节点的左右孩子
  3. function dfs(root) {
  4. if(root==null) return root;
  5. [root.left,root.right]=[root.right,root.left]; // 中
  6. dfs(root.left); // 左
  7. dfs(root.right); // 右
  8. }
  9. dfs(root);
  10. return root;
  11. };

101 对称二叉树

题目链接

给你一个二叉树的根节点 root , 检查它是否轴对称。

第一遍自己写不是很清楚,稀里糊涂的也ac了,主要思路没有捋清楚。二叉树是否对称,要检查左子树和右子树是不是相互翻转的,遍历的时候要遍历的是左右两个子树。要理解只能通过后续遍历,因为根节点的结果要通过左右节点的比较结果来得到。

  1. var isSymmetric = function (root) {
  2. if(root==null) return true;
  3. // 递归遍历节点是否轴对称
  4. function dfs(left,right){
  5. // 终止条件
  6. if(left==null && right==null) return true;
  7. if(left==null && right!=null || left!=null && right==null || left.val!=right.val) return false;
  8. // 这样写不容易理解
  9. // return dfs(left.left,right.right) && dfs(left.right,right.left);
  10. let outside = dfs(left.left,right.right); // 左
  11. let inside = dfs(left.right,right.left); // 右
  12. let isSame = outside && inside; // 中,由左右得到中的结果
  13. return isSame;
  14. }
  15. return dfs(root.left,root.right);
  16. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/360570
推荐阅读
相关标签
  

闽ICP备14008679号