
LeetCode 872 叶子相似的树[DFS 二叉树] HERODING的LeetCode之路
发布日期:2021-05-13 20:58:42
浏览次数:10
分类:精选文章
本文共 1569 字,大约阅读时间需要 5 分钟。
为了判断两棵树是否为“叶子相似的树”,我们需要确保两棵树的叶子节点在同样的顺序下具有相同的值。以下是解决问题的详细步骤:
解题思路
理解问题:叶子相似树要求两棵树的叶子节点顺序一致且对应相等。例如,树一的叶子依次为A、B、C,树二的叶子同样为A、B、C。
选择算法:使用深度优先搜索(DFS)来遍历每棵树的叶子节点。对于每个节点,判断其是否为叶子节点(左右子节点均为空),如果是,则记录其值。收集完成后,比较两棵树的叶子值列表。
递归函数设计:设计一个递归函数遍历树,收集叶子节点的值。该函数首先检查当前节点是否为叶子节点,若是则记录值,否则分别递归处理左右子树。
优化思考:避免不必要的递归,确保叶子节点的顺序一致性。通过先处理左子树再处理右子树的顺序,确保叶子值的收集顺序与树的结构有关。
优化后的代码
// 定义TreeNode结构体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 & res) { if (!root->left && !root->right) { res.push_back(root->val); return; } else { // 先处理左子树 if (root->left) { dfs(root->left, res); } // 再处理右子树 if (root->right) { dfs(root->right, res); } } } bool leafSimilar(TreeNode* root1, TreeNode* root2) { vector res1, res2; // 处理根1 if (root1) { dfs(root1, res1); } // 处理根2 if (root2) { dfs(root2, res2); } // 比较结果 return res1 == res2; }};
代码解释
TreeNode结构体:定义了二叉树的节点,包含值、左指针和右指针。
dfs函数:使用递归遍历树,收集叶子节点的值。当节点左右都为空时,表示为叶子,直接将值添加到结果列表中。
处理左右子树:分别处理左子树和右子树,确保按照预定顺序(先左后右)收集叶子节点的值。
leafSimilar函数:比较两棵树的叶子值列表,返回两个列表是否相等,判断两棵树是否为叶子相似树。
这种方法确保了两种树的叶子节点顺序和值的完全一致性,解决了问题。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月02日 02时05分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
httprunner学习23-加解密
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
阿里云“网红"运维工程师白金:做一个平凡的圆梦人
2019-03-06
李笑来必读书籍整理
2019-03-06
http头部 Expect
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
【Java-27】Java常见错误记录
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
SQL基础语法
2019-03-07
git拉取远程指定分支代码
2019-03-07