LeetCode热题HOT-100 101、对称二叉树

题目链接

今天突然发现,在书写递归函数且函数有返回值时,一定要明白函数的返回值究竟是什么东西

  • 思路一:递归
    • 对称二叉树的特点就是,左右两侧的对称位置结点的val是一样的,所以对于我们的dfs函数参数需要有两个TreeNode,是左右两侧对应的结点。首先需要判断是否是null,这也是递归的终止条件~然后还需判断值是否相等,相等的话继续递归地调用dfs函数

    • 在这里我们的dfs函数返回值是以该结点为根节点的子树是不是轴对称的

    • 需要注意的是,关于结点是否为null的判断方法

      if (null == left && null == right)
              return true;
      if (null == left || null == right)
          return false;
      
    • 还有一点就是我们在递归调用dfs时因为是轴对称,所以应该left.right和right.left相对应

      AC代码

      class Solution {
          public boolean isSymmetric(TreeNode root) {
              return dfs(root.left, root.right);
          }
    
          boolean dfs(TreeNode left, TreeNode right) {
              if (null == left && null == right)
                  return true;
              if (null == left || null == right)
                  return false;
              
              return left.val == right.val && dfs(left.right, right.left) && dfs(left.left, right.right);
          }
      }
    
  • 思路二:迭代
    • 迭代的实现需要借助队列,注意此时的遍历不是此前用过的前序、中序、后序遍历的方法,而是先放入两次root到队列中,每次从队列取出两个值,先进行必要的null值判断,然后再判断val是否相等,相等的话再把对应位置的四个值放入。注意放入的顺序
      class Solution {
          public boolean isSymmetric(TreeNode root) {
              Queue<TreeNode> queue = new LinkedList<>();
              queue.offer(root);
              queue.offer(root);
    
              while (!queue.isEmpty()) {
                  TreeNode left = queue.poll(), right = queue.poll();
    
                  if (null == left && null == right)
                      continue;
                  if (null == left || null == right)
                      return false;
                  if (left.val != right.val)
                      return false;
    
                  queue.offer(left.right);
                  queue.offer(right.left);
                  queue.offer(left.left);
                  queue.offer(right.right);
              }
              return true;
          }
      }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值