首页 > 其他分享 >leetcode:二叉树oj题

leetcode:二叉树oj题

时间:2024-10-22 12:19:40浏览次数:3  
标签:right return oj res 二叉树 root leetcode left

目录

1.单值二叉树

2.相同的树

3.对称二叉树

4.二叉树的前序遍历

5.二叉树的中序遍历

6.二叉树的后序遍历


1.单值二叉树

https://leetcode.cn/problems/univalued-binary-tree/description/

        对于这道题,我们可以进行深度优先查找,当值相同时就继续向下查找,如左子树,如果值相同就继续向下搜索左子树节点的值,不同就返回false,不用查找

class Solution {
public:
    bool isUnivalTree(TreeNode* root) {
        if(root == NULL)
            return true;

        if(root->left != NULL)
        {
            if(root->val != root->left->val || !isUnivalTree(root->left))
                return false;
        }

        if(root->right != NULL)
        {
            if(root->val != root->right->val || !isUnivalTree(root->right))
                return false;
        }

        return true;
    }
};

2.相同的树

https://leetcode.cn/problems/same-tree/description/

        对于这道题,如果两个二叉树都为空,则两个二叉树相同.如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同

        如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p == NULL && q == NULL) 
        {
            return true;
        } 
        else if (p == NULL || q == NULL) 
        {
            return false;
        } 
        else if (p->val != q->val) 
        {
            return false;
        } 
        else 
        {
            return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
        }
    }
};

3.对称二叉树

https://leetcode.cn/problems/symmetric-tree/

        对于这道题比较简单,从结构和值两方面考虑会简单得多.

结构:如果左右子树都为空,那么就对称,返回true,如果一方为空一方不为空,就返回false

值:左右子树的值不同,就返回false,相同就递归向下走,检查下一子树的值

bool isSameNode(struct TreeNode* left, struct TreeNode* right) {
    //结构相同
    if(left == NULL && right == NULL)
        return true;

    //结构不同
    if(left == NULL && right != NULL)
        return false;

    //结构不同
    if(left != NULL && right == NULL)
        return false;

    //值不同
    if(left->val != right->val)
        return false;
        
    return isSameNode(left->left, right->right) && isSameNode(left->right, right->left);
}

bool isSymmetric(struct TreeNode* root) {
    return isSameNode(root->left, root->right);
}

4.二叉树的前序遍历

https://leetcode.cn/problems/binary-tree-preorder-traversal/description/

        二叉树在前一节的过程中已经讲解,在此不多做解释,如不了解,可以观看https://blog.csdn.net/w200514/article/details/143101700?sharetype=blog&shareId=143101700&sharerefer=APP&sharesource=w200514&sharefrom=link

class Solution {
public:
    void preorder(TreeNode* root,vector<int> &res)
    {
        if(root==NULL)
            return;

        res.push_back(root->val);
        preorder(root->left,res);
        preorder(root->right,res);
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> res;
        preorder(root,res);
        return  res;
    }
};

5.二叉树的中序遍历

https://leetcode.cn/problems/binary-tree-inorder-traversal/submissions/574731444/

class Solution {
public:
    void inorder(TreeNode* root,vector<int>& res)
    {
        if(root == NULL)
            return;
        inorder(root->left,res);
        res.push_back(root->val);
        inorder(root->right,res);
    }

    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        inorder(root,res);
        return res;
    }
};

6.二叉树的后序遍历

https://leetcode.cn/problems/binary-tree-postorder-traversal/description/

class Solution {
public:
     void postorder(TreeNode* root,vector<int>& res)
    {
        if(root == NULL)
            return;
        postorder(root->left,res);
        postorder(root->right,res);
        res.push_back(root->val);
    }

    vector<int> postorderTraversal(TreeNode* root) {
        vector<int>res;
        postorder(root,res);
        return res;
    }
};

标签:right,return,oj,res,二叉树,root,leetcode,left
From: https://blog.csdn.net/w200514/article/details/143140765

相关文章

  • 【LeetCode】动态规划—790. 多米诺和托米诺平铺(附完整Python/C++代码)
    动态规划—790.多米诺和托米诺平铺题目描述前言基本思路1.定义2.理解问题和递推关系3.解决方法4.进一步优化5.小总结代码实现Python代码Python代码解释总结C++代码C++代码解释总结总结题目描述前言本文将详细讨论LeetCode上的"多米诺和三米诺平铺"问题。......
  • Leetcode—175. 组合两个表【简单】
    2024每日刷题(192)Leetcode—175.组合两个表实现代码#WriteyourMySQLquerystatementbelowSELECTPerson.firstName,Person.lastName,Address.city,Address.stateFROMPersonLEFTJOINAddressUSING(personId);运行结果之......
  • Leetcode 383.赎金信
    问题描述给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。示例1:输入:ransomNote="a",magazine="b"输出:false示例2:输入:ra......
  • LeetCode题练习与总结:区间和的个数--327
    一、题目描述给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower,upper] (包含 lower 和 upper)之内的 区间和的个数 。区间和 S(i,j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。示例1:输入......
  • LeetCode题练习与总结:奇偶链表--328
    一、题目描述给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在 ......
  • dfs题目:平衡二叉树(java)
    平衡二叉树题目思路开始的error代码(最后一行return的地方有误)修正的代码题目链接:平衡二叉树题目题目思路用分治的思想,要想看看以root为根节点的二叉树是不是平衡二叉树,得看他的左子树和右子树是不是平衡二叉树,如果左子树和右子树都是平衡的,且root自己是平衡的......
  • Leetcode 328. Odd Even Linked List
    我的解法没有什么需要推理的地方,要注意一开始要让cur走的比odd和even快,否则会导致cur的next被odd和even修改,代码里有注释。ListNode*oddEvenList(ListNode*head){if(!head){returnhead;}ListNode*cur=nullptr,*headofOdd=h......
  • 代码随想录算法训练营第六天| leetcode242.有效的字母异位词、leetcode349.两个数组的
    1.leetcode242.有效的字母异位词题目链接:242.有效的字母异位词-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili自己的思路:首先就是对字符串进行分开成一个一个单独的字母,然后使用列表存储这些数据,再对......
  • LeetCode刷题日记之贪心算法(五)
    目录前言无重叠区间划分字母区间合并区间单调递增的数字监控二叉树总结前言随着对贪心算法的不断深入,本篇文章将继续挑战一些经典的题目,进一步巩固这一算法的应用技巧。希望博主记录的内容能够帮助大家更好地掌握贪心算法的解题思路✍✍✍无重叠区间LeetCode题目......
  • Leetcode 160. Intersection of Two Linked Lists
    Leetcode160.IntersectionofTwoLinkedLists错解一开始没看清题目的要求中,提到最后表结构不能变,想到的做法是:先遍历A,把A翻转,然后B就可以走到headA判断出它们是否相交,但是即便如此,也不能判断出相交点在哪里,而且还会破坏链表的结构,所以这种写法不行。正解classSolution{......