2021-05-10请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
Posted Roam-G
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-05-10请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。相关的知识,希望对你有一定的参考价值。
难度简单141
请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8)
的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个根结点分别为 root1
和 root2
的树是叶相似的,则返回 true
;否则返回 false
。
示例 1:
输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8] 输出:true
示例 2:
输入:root1 = [1], root2 = [1] 输出:true
示例 3:
输入:root1 = [1], root2 = [2] 输出:false
示例 4:
输入:root1 = [1,2], root2 = [2,2] 输出:true
示例 5:
输入:root1 = [1,2,3], root2 = [1,3,2] 输出:false
方法一:深度优先搜索
思路与算法
我们可以使用深度优先搜索的方法得到一棵树的「叶值序列」。
具体地,在深度优先搜索的过程中,我们总是先搜索当前节点的左子节点,再搜索当前节点的右子节点。如果我们搜索到一个叶节点,就将它的值放入序列中。
在得到了两棵树分别的「叶值序列」后,我们比较它们是否相等即可。
代码
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/leaf-similar-trees/solution/xie-zi-xiang-si-de-shu-by-leetcode-solut-z0w6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
c++
class Solution {
public:
void dfs(TreeNode* node, vector<int>& seq) {
if (!node->left && !node->right) {
seq.push_back(node->val);
}
else {
if (node->left) {
dfs(node->left, seq);
}
if (node->right) {
dfs(node->right, seq);
}
}
}
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
vector<int> seq1;
if (root1) {
dfs(root1, seq1);
}
vector<int> seq2;
if (root2) {
dfs(root2, seq2);
}
return seq1 == seq2;
}
};
java
class Solution {
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
List<Integer> seq1 = new ArrayList<Integer>();
if (root1 != null) {
dfs(root1, seq1);
}
List<Integer> seq2 = new ArrayList<Integer>();
if (root2 != null) {
dfs(root2, seq2);
}
return seq1.equals(seq2);
}
public void dfs(TreeNode node, List<Integer> seq) {
if (node.left == null && node.right == null) {
seq.add(node.val);
} else {
if (node.left != null) {
dfs(node.left, seq);
}
if (node.right != null) {
dfs(node.right, seq);
}
}
}
}
以上是关于2021-05-10请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。的主要内容,如果未能解决你的问题,请参考以下文章
2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回数组里所有值的最低公共祖先。
872. 叶子相似的树 / 剑指 Offer 33. 二叉搜索树的后序遍历序列 / 剑指 Offer 34. 二叉树中和为某一值的路径 / 剑指 Offer 35. 复杂链表的复制