LeetCode 872 叶子相似的树[DFS 二叉树] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 872 叶子相似的树[DFS 二叉树] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述在这里插入图片描述解题思路:
从左往右找叶子结点判断相等,首选深度优先,用vector存储遍历后的叶子节点,最后进行简单优化下,代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void dfs(TreeNode* root, vector<int>& res) {
        // 如果当前为空
        if(root == nullptr) {
            return;
        }
        // 如果左右都是空,说明是叶子节点
        if(root -> left == nullptr && root -> right == nullptr) {
            res.push_back(root -> val);
            return;
        }
        // 先左后右
        dfs(root -> left, res);
        dfs(root -> right, res);
    }

    bool leafSimilar(TreeNode* root1, TreeNode* root2) {
        vector<int> res1;
        dfs(root1, res1);
        vector<int> res2;
        dfs(root2, res2);
        // 判断返回的结果是否相等
        return res1 == res2;
    }
};


/*作者:heroding
链接:https://leetcode-cn.com/problems/leaf-similar-trees/solution/cshen-du-you-xian-by-heroding-5nt5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

优化后的代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void dfs(TreeNode* root, vector<int>& res) {
        // 如果左右都是空,说明是叶子节点
        if(!root -> left && !root -> right) {
            res.push_back(root -> val);
        } else {
             // 先左后右
            if(root -> left) {
                dfs(root -> left, res);
            }
            if(root -> right) {
                dfs(root -> right, res);
            }
            
        }
       
    }

    bool leafSimilar(TreeNode* root1, TreeNode* root2) {
        vector<int> res1;
        if(root1) {
            dfs(root1, res1);
        }
        vector<int> res2;
        if(root2) {
            dfs(root2, res2);
        }
        // 判断返回的结果是否相等
        return res1 == res2;
    }
};


/*作者:heroding
链接:https://leetcode-cn.com/problems/leaf-similar-trees/solution/cshen-du-you-xian-by-heroding-5nt5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

以上是关于LeetCode 872 叶子相似的树[DFS 二叉树] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 872. 叶子相似的树 Java/C++ 递归法&迭代法

LeetCode 872. 叶子相似的树 Java/C++ 递归法&迭代法

LeetCode 872. 叶子相似的树

leetcode872. 叶子相似的树(c++)

我用java刷 leetcode 872. 叶子相似的树

leetcode 872. 叶子相似的树(Leaf-Similar Trees)