lc0309
✅ 872. 叶子相似的树
https://leetcode-cn.com/problems/leaf-similar-trees/
描述
请考虑一颗二
叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。
解答
(中序)遍历,每次碰到一个叶子,就加入队列,最后比较两个队列一样不。
c todo watch me
/*思路,先把两个root的叶子结点分别存在两个数组里面,然后再比较这两个数组的元素是否一致*/
void ordertraversal(struct TreeNode* root, int* leaf, int* count)
{
if(root)
{
if(root->left == NULL && root->right == NULL)
{
leaf[*count] = root->val;
(*count)++;
}
ordertraversal(root->left, leaf, count); //这里的count就不用&count,因为这里的count相当于指针了
ordertraversal(root->right, leaf, count);
}
}
bool leafSimilar(struct TreeNode* root1, struct TreeNode* root2)
{
int leaf1[100] = {0}, leaf2[100] = {0}, i = 0, j = 0, count1 = 0, count2 = 0;
ordertraversal(root1, leaf1, &count1); //这种一般都要传地址,count的地址,传值就会出错
ordertraversal(root2, leaf2, &count2);
while(leaf1[i++] == leaf2[j++] && i < 100 && j < 100);
if(i < 100) return false;
else return true;
}
py
tt 实际上就是递归找叶子
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def leafSimilar(self, root1: TreeNode, root2: TreeNode) -> bool:
#tt 实际上就是找叶子
def findLeaf(node, seq):
if node:
if not node.left and not node.right:
seq.append(node.val)
findLeaf(node.left, seq)
findLeaf(node.right, seq)
seq1, seq2 = [], []
findLeaf(root1, seq1)
findLeaf(root2, seq2)
return seq1 == seq2
'''
执行用时 :
36 ms
, 在所有 Python3 提交中击败了
69.81%
的用户
内存消耗 :
13.5 MB
, 在所有 Python3 提交中击败了
13.83%
的用户
'''