leetcode每日一题
[1738] 找出第 K 大的异或坐标值
[1744] 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
[231] 2的幂
堆排复习
[461] 汉明距离
[1190] 反转每对括号间的子串
[1707] 与数组中元素的最大异或值
[810] 黑板异或游戏
[1035] 不相交的线
[692] 前K个高频单词
[872] 叶子相似的树
[1442] 形成两个异或相等数组的三元组数目
[993] 二叉树的堂兄弟节点
[421] 数组中两个数的最大异或值
[13] 罗马数字转整数
[12] 整数转罗马数字
[1269]. 停在原地的方案数
[1310] 子数组异或查询
[1734] 解码异或后的排列
本文档使用 MrDoc 发布
-
+
首页
[872] 叶子相似的树
[872] 叶子相似的树 [https://leetcode-cn.com/problems/leaf-similar-trees/](https://leetcode-cn.com/problems/leaf-similar-trees/) 请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。 如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。 如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 根据前序遍历获得树的叶子节点,再比较两个树的叶子节点顺序是否一致 ``` Cpp /** * 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 GetTreeNodeList(TreeNode* root, vector<int> &node_list) { if(root == nullptr) return; //是叶子节点 if(root->left == nullptr && root->right == nullptr) { node_list.push_back(root->val); } GetTreeNodeList(root->left,node_list); //递归左子树 GetTreeNodeList(root->right,node_list); //递归右子树 } bool leafSimilar(TreeNode* root1, TreeNode* root2) { if(root1 == nullptr && root2 == nullptr) return true; if(root1 == nullptr || root2 == nullptr) return false; vector<int> root1_node; vector<int> root2_node; //获取两个树的叶子节点 GetTreeNodeList(root1,root1_node); GetTreeNodeList(root2,root2_node); if((int)root1_node.size() != (int)root2_node.size()) return false; //判断叶子节点是否一致 for(int i = 0; i < (int)root1_node.size(); ++i) { if(root1_node[i] != root2_node[i]) return false; } return true; } };
ty
2021年5月10日 10:40
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
阅读量
次
本站总访问量
次
本站访客数
人次
Markdown文件
分享
链接
类型
密码
更新密码