【数据结构练习】二叉树相关oj题集锦一

目录

          前言

1.相同的树

2.另一棵树的子树

3.翻转二叉树

 4.二叉树的前序遍历


前言

编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,此为二叉树面试题第一篇,每篇大约5题左右。该系列会不定期更新,敬请期待!


1.相同的树

100. 相同的树icon-default.png?t=N7T8https://leetcode.cn/problems/same-tree/题目描述:

【数据结构练习】二叉树相关oj题集锦一_第1张图片

【数据结构练习】二叉树相关oj题集锦一_第2张图片

【数据结构练习】二叉树相关oj题集锦一_第3张图片

代码: 

    public boolean isSameTree(TreeNode p, TreeNode q) {
      if(p==null&&q!=null||q==null&&p!=null){
          return false;
      }
      if(p==null&&q==null){
          return true;
      }
      if(p.val!=q.val){
          return false;
      }
      return isSameTree(p.left, q.left)&&isSameTree(p.right, q.right);
    }

解析:

【数据结构练习】二叉树相关oj题集锦一_第4张图片

【数据结构练习】二叉树相关oj题集锦一_第5张图片


2.另一棵树的子树

572. 另一棵树的子树icon-default.png?t=N7T8https://leetcode.cn/problems/subtree-of-another-tree/ 题目描述:

【数据结构练习】二叉树相关oj题集锦一_第6张图片

【数据结构练习】二叉树相关oj题集锦一_第7张图片 【数据结构练习】二叉树相关oj题集锦一_第8张图片

【数据结构练习】二叉树相关oj题集锦一_第9张图片

代码: 

class Solution {
 public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q != null || q == null && p != null) {
            return false;
        }
        if (p == null && q == null) {
            return true;
        }
        if (p.val != q.val) {
            return false;
        }
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
      

   public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root == null) {
            return false;
        }
        //1、是不是和根节点相同
        if(isSameTree(root,subRoot)) {
            return true;
        }
        //2、判断是不是root的左子树
        if(isSubtree(root.left,subRoot)) {
            return true;
        }
        //3、右子树
        if(isSubtree(root.right,subRoot)) {
            return true;
        }
        //4、返回
        return false;
    }
}

解析:

【数据结构练习】二叉树相关oj题集锦一_第10张图片


3.翻转二叉树

226. 翻转二叉树icon-default.png?t=N7T8https://leetcode.cn/problems/invert-binary-tree/  题目描述:

【数据结构练习】二叉树相关oj题集锦一_第11张图片

【数据结构练习】二叉树相关oj题集锦一_第12张图片

【数据结构练习】二叉树相关oj题集锦一_第13张图片

 代码:

   public TreeNode invertTree(TreeNode root) {
        if(root==null){
            return root;
        }
        TreeNode tmp=root.left;
        root.left=root.right;
        root.right=tmp;
        invertTree(root.left);
        invertTree(root.right);
        return root;

    }

解析:

【数据结构练习】二叉树相关oj题集锦一_第14张图片


 4.二叉树的前序遍历

144. 二叉树的前序遍历icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-preorder-traversal/

【数据结构练习】二叉树相关oj题集锦一_第15张图片

【数据结构练习】二叉树相关oj题集锦一_第16张图片

【数据结构练习】二叉树相关oj题集锦一_第17张图片

代码:

class Solution {
  public List preorderTraversal(TreeNode root) {
        List ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        ret.add(root.val);
        ret.addAll(preorderTraversal(root.left));
        ret.addAll(preorderTraversal(root.right));
        return ret;
    }
}

 同类型问题

94. 二叉树的中序遍历icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-inorder-traversal/

145. 二叉树的后序遍历icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-postorder-traversal/


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

你可能感兴趣的:(数据结构,算法)