872. 叶子相似的树

╰半夏微凉° 2023-02-18 08:16 65阅读 0赞

题目来源

872. 叶子相似的树

题目描述

在这里插入图片描述

注意:

在这里插入图片描述

在这里插入图片描述

题目解析

先序遍历遍历,遇到叶结点后直接将叶结点存入数组中,那么对于两个树遍历后就分别得到两个包含叶结点的数组,最后再比较一下这两个数组是否相同即可

  1. class Solution {
  2. public boolean leafSimilar(TreeNode root1, TreeNode root2) {
  3. if (root1 == null && root2 == null){
  4. return true;
  5. }
  6. if (root1 == null){
  7. return false;
  8. }
  9. if (root2 == null){
  10. return false;
  11. }
  12. List<Integer> list1 = new ArrayList<>();
  13. List<Integer> list2 = new ArrayList<>();
  14. leaf(root1, list1);
  15. leaf(root2, list2);
  16. if (list1.size() != list2.size()){
  17. return false;
  18. }
  19. for (int i = 0; i < list1.size(); i++) {
  20. if (!list1.get(i).equals(list2.get(i))){
  21. return false;
  22. }
  23. }
  24. return true;
  25. }
  26. private void leaf(TreeNode root, List<Integer> list){
  27. if (root.left == null && root.right == null){
  28. list.add(root.val);
  29. return;
  30. }
  31. if (root.left != null){
  32. leaf(root.left, list);
  33. }
  34. if (root.right != null){
  35. leaf(root.right, list);
  36. }
  37. }
  38. }

在这里插入图片描述

优化:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public boolean leafSimilar(TreeNode root1, TreeNode root2) {
  12. List<Integer> list1 = new ArrayList<>();
  13. List<Integer> list2 = new ArrayList<>();
  14. leaf(root1, list1);
  15. leaf(root2, list2);
  16. if (list1.size() != list2.size()){
  17. return false;
  18. }
  19. for (int i = 0; i < list1.size(); i++) {
  20. if (!list1.get(i).equals(list2.get(i))){
  21. return false;
  22. }
  23. }
  24. return true;
  25. }
  26. private void leaf(TreeNode root, List<Integer> list){
  27. if (root == null){
  28. return;
  29. }
  30. if (root.left == null && root.right == null){
  31. list.add(root.val);
  32. return;
  33. }
  34. leaf(root.left, list);
  35. leaf(root.right, list);
  36. }
  37. }

在这里插入图片描述

可以不用数组,用两个字符串,那么在每个叶结点值直接要加上一个分隔符,这样才能保证不会错位,最后比较两个字符串是否相等即可

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public boolean leafSimilar(TreeNode root1, TreeNode root2) {
  12. String str1 = "";
  13. String str2 = "";
  14. str1 = leaf(root1, "");
  15. str2 = leaf(root2, "");
  16. return str1.equals(str2);
  17. }
  18. private String leaf(TreeNode root, String str){
  19. if (root == null){
  20. return str;
  21. }
  22. if (root.left == null && root.right == null){
  23. str = str + root.val + ",";
  24. return str;
  25. }
  26. return leaf(root.left, str) + leaf(root.right, str);
  27. }
  28. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,65人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode 872. 叶子相似

    请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 ![tree.png][] 举个例子,如上图所示,给定一颗叶值序列为 `(6, 7,