872. Leaf-Similar Trees

Posted tobeabetterpig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了872. Leaf-Similar Trees相关的知识,希望对你有一定的参考价值。

https://leetcode.com/problems/leaf-similar-trees/discuss/152358/Simple-6-lines-Java-StringBuilder-+-traverse-with-explanation



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).
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.
 



Sol 1 


class Solution {
    // preorder , root, left, right 
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        traverse(root1, sb1);
        traverse(root2, sb2);
        return sb1.toString().equals(sb2.toString()); 
    }
    private void traverse(TreeNode node, StringBuilder sb){
        // base case
        if(node == null) return;
        if(node.left == null && node.right == null) sb.append(node.val + ",");
        traverse(node.left, sb);
        traverse(node.right, sb);
    }
}




class Solution {
    // inorder , left,root, right 
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        traverse(root1, sb1);
        traverse(root2, sb2);
        return sb1.toString().equals(sb2.toString()); 
    }
    private void traverse(TreeNode node, StringBuilder sb){
        // base case
        if(node == null) return;
        traverse(node.left, sb);
        if(node.left == null && node.right == null) sb.append(node.val + ",");
        
        traverse(node.right, sb);
    }
}




Sol 2 
O(logN) Space

https://leetcode.com/problems/leaf-similar-trees/discuss/152329/C++JavaPython-O(logN)-Space


    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        Stack<TreeNode> s1 = new Stack<>(), s2 = new Stack<>();
        s1.push(root1); s2.push(root2);
        while (!s1.empty() && !s2.empty())
            if (dfs(s1) != dfs(s2)) return false;
        return s1.empty() && s2.empty();
    }

    public int dfs(Stack<TreeNode> s) {
        while (true) {
            TreeNode node = s.pop();
            if (node.right != null) s.push(node.right);
            if (node.left != null) s.push(node.left);
            if (node.left == null && node.right == null) return node.val;
        }
    }

 

以上是关于872. Leaf-Similar Trees的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode_easy872. Leaf-Similar Trees

LeetCode 872 Leaf-Similar Trees 解题报告

[LeetCode] 872. Leaf-Similar Trees

Leetcode 872. Leaf-Similar Trees

leetcode 872. 叶子相似的树(Leaf-Similar Trees)

leetcode872