博客
关于我
LeetCode 872 叶子相似的树[DFS 二叉树] HERODING的LeetCode之路
阅读量:562 次
发布时间:2019-03-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函数:比较两棵树的叶子值列表,返回两个列表是否相等,判断两棵树是否为叶子相似树。

  • 这种方法确保了两种树的叶子节点顺序和值的完全一致性,解决了问题。

    转载地址:http://vpfvz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 1064 You have an error in your SQL syntax 错误解决办法
    查看>>
    【Flink】Flink 底层RPC框架分析
    查看>>
    MySQL错误日志(Error Log)
    查看>>
    C++高精度模板
    查看>>
    解决:angularjs radio默认选中失效问题
    查看>>
    windows环境下安装zookeeper(仅本地使用)
    查看>>
    缓冲区溢出实例(一)--Windows
    查看>>
    PHP一句话木马小总结与SQL语句写一句话木马
    查看>>
    Python中字符串前添加r ,b, u, f前缀的含义
    查看>>
    Hadoop学习笔记—Yarn
    查看>>
    JSONPath小试牛刀之Snack3
    查看>>
    Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
    查看>>
    wxWidgets源码分析(3) - 消息映射表
    查看>>
    wxWidgets源码分析(5) - 窗口管理
    查看>>
    wxWidgets源码分析(7) - 窗口尺寸
    查看>>
    wxWidgets源码分析(8) - MVC架构
    查看>>
    wxWidgets源码分析(9) - wxString
    查看>>
    Mybatis Generator最完整配置详解
    查看>>
    [白话解析] 深入浅出熵的概念 & 决策树之ID3算法
    查看>>
    [梁山好汉说IT] 梁山好汉和抢劫银行
    查看>>