LeetCode-4

力扣刷题

Posted by TkiChus on August 19, 2019

叶子相似的树

题解

首先理解题意,其实要求的就是从左到右的叶子结点的数值是相同的,这也是根本性要求。

题中信息:

  1. 给定二叉树的所有数值

    2.排列顺序给定,就是 根->左 ->右

结果要求:

返回值为 true 或者 false, 也就是root1和root2是否为叶子相似树。

我们这里的解题思路,根据递归的方式来进行二叉树叶子结点的查找,然后进行对比,得出结果。

其实使用二叉树的先序遍历也可以做。


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

class Solution {
public:
    void leafval(vector<int> &leafArry,TreeNode*root)
    {
        if(root!=NULL)
        {
            if(root->right==NULL&&root->left==NULL)
            leafArry.push_back(root->val);  // 压栈
            leafval(leafArry,root->right); //递归右节点
            leafval(leafArry,root->left);    //递归左节点
        }
    }
    bool leafSimilar(TreeNode* root1, TreeNode* root2) {
        vector<int>leafArry1;
        vector<int>leafArry2;
        leafval(leafArry1,root1);  // 得到叶子结点的结果
        leafval(leafArry2,root2);
        //sort(leafArry1.begin(),leafArry1.end());
        //sort(leafArry2.begin(),leafArry2.end());
        if(leafArry1.size()==leafArry2.size())
        {
            for(int i=0;i<leafArry1.size();i++)
                if(leafArry1[i]!=leafArry2[i]) return false;            
        }
        else
            return false;
        return true;
    }

};