[LeetCode] 872. Leaf-Similar Trees

本文介绍了一种算法,用于判断两棵二叉树是否具有相同的叶子节点序列。通过深度优先搜索,将每棵树的叶子节点按从左至右的顺序排列,再对比两序列以确定树的叶子相似性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接: https://leetcode.com/problems/leaf-similar-trees/

1. 题目介绍

Consider all the leaves of a binary tree. From left to right order, the values of those leaves form a leaf value sequence.
将一棵二叉树的全部叶子节点都找出来,并且将它们按照从左到右的顺序,依次排列。
在这里插入图片描述
For example, in the given tree above, the leaf value sequence is (6, 7, 4, 9, 8).
举个例子,上面这颗二叉树,叶子节点的排列为(6, 7, 4, 9, 8)

Two binary trees are considered leaf-similar if their leaf value sequence is the same.
Return true if and only if the two given trees with head nodes root1 and root2 are leaf-similar.
如果两个二叉树的叶子节点排列是一样的,那么就认为这两棵树是“叶子相似”的。需要写一个函数判断两个二叉树是不是“叶子相似”。

Note:
Both of the given trees will have between 1 and 100 nodes.
两棵树的节点数都是1到100之间。

2. 解题思路

寻找叶子节点,并且要按照从左至右的顺序排列。一个非常合适的方法就是深度优先搜索。因此需要设计一个深度优先搜索的函数,负责把一棵树的叶子节点排列计算出来。然后再比较这两棵树的排列就可以了。
实现代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        ArrayList<Integer> a = new ArrayList<Integer>();
        treeToList(root1,a);
        ArrayList<Integer> b = new ArrayList<Integer>();
        treeToList(root2,b);

        return a.equals(b);
    }
	
	public void treeToList(TreeNode root , ArrayList<Integer> t){
		if (root.left == null && root.right == null) {
			t.add(root.val);
			return;
		}

		if (root.left != null) {
			treeToList(root.left,t);
		}
		if (root.right != null) {
			treeToList(root.right,t);
		}
		return;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值