lc0309

✅ 872. 叶子相似的树

https://leetcode-cn.com/problems/leaf-similar-trees/

描述

请考虑一颗二
叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。

Screen Shot 2020-03-09 at 09.57.49.jpg

举个例子,如上图所示,给定一颗叶值序列为 (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%
的用户
        '''

posted on 2020-03-09 17:13  Paulkg12  阅读(109)  评论(0编辑  收藏  举报

导航